I hope to learn various software design and development techniques in this class. Hopefully, all of those listed in the course syllabus! I feel that I have a good understanding of version control systems that are used for software management and maintenance purposes. I'm particularly interested in learning techniques for design patterns and their importance in the world of software engineering. Also, by the means of writing blog entries and papers in this class, I hope to improve my writing skills in the English language.
I think that I have a reasonably decent understanding of version control systems. This past summer, I had the opportunity to intern at National Instruments, where I used Perforce as the version control system for the software application I designed. I worked on the application for sixteen weeks and used Perforce extensively for making code revisions and backing up data (submitting at least one revision every two to three days). Just couple weeks into the internship, I started creating several change-lists and revision copies of my code. My colleagues strongly encouraged me to commit changes on a regular basis, so that the master copy stored on the repository contained the most recent version of my code. It didn't take me long to realize how powerful and awesome version control systems are. On several occasions, I felt the need to go back to an older version of my code and make design comparisons with my current version. Also, there were times when I had to revert back to an older version, simply because of changes in the design specs or for readability or modularity purposes. In all these situations, Perforce proved to be very useful. It allowed me to view multiple revisions simultaneously, revert back to an older version when needed, and share my code with fellow colleagues who were also working on the same project. Certainly, this is not all that we can do using Perforce or any other version control system. There are a lot more features that I hope to learn in this class, which will eventually help me improve my software management skills in the future projects.
I'm extremely interested in learning design patterns. In software development, we as programmers often run into problems that are commonly occurring and usually have a specific type of solution to them. Using design patterns we can study such problems and learn how to deal with them. These patterns are nothing but generalized design strategies that serve as a generic solution for certain problems. I've had very little experience in dealing with design patterns and would like to significantly improve upon in this class. What I find interesting is that, these patterns help us in creating simple and elegant solutions without 'reinventing the wheel'. They also help us in communicating effectively with other programmers, especially when making major design decisions for an application. It is definitely easier to read and modify someone else's code if we know the design pattern used beforehand. Some of the application design patterns that I learned over the summer are standard state machines, producer/consumer loops, queue based message handlers, and object-oriented design approach. Most of these are limited to LabVIEW, except for object-oriented design, which intrigues me the most. It is also of key importance to know when to use which design pattern. This is something that I am hoping to learn in this class. By the end of this course I anticipate that I should be able to identify a problem and find the correct design strategy to go about solving it.
I'm taking CSci 4011 (Formal languages and Automata theory) along with this course and I believe that the theory based knowledge from 4011 and the design and development techniques that I learn in this class will help me prepare for the oncoming challenges in the software engineering track. I have a lot of expectations from this class. I understand the level of dedication and sincerity this class demands and I'm determined to give it my best. Undoubtedly, the techniques and tools that I develop here will help me become a successful programmer in the future.