Being a sophomore computer science major at the U of M, I have completed two introductory programming classes and one class in discrete structures. These courses have prepared me for many higher level ones in various ways and more adequately in some areas than others. I've gained quite a few useful skills in the two programming classes that I mentioned above but I am by no means an expert programmer. In these classes, I have most notably gained the ability to accurately comment my code and to follow the specifications and requirements listed in assignments. However, I have struggled to write code that is easy to understand and that accomplishes something in a non-awkward way. I also lack many of the C++ skills that will be necessary in the class and this will make the course a challenge.
Let's begin by talking about code commenting. When I started out in CSCI 1901 last fall, I didn't really know what putting comments into code meant, having not programmed more than 10 or 20 hours in my life. In 1901, I commented code for a lot of small programs and learned how to effectively tell the reader of the code how the code worked in a few simple sentences. For CSCI 1902 the following semester, I had to make much bigger programs such as a bus route simulation and movie database. These projects required not only more extensive coding, but also a deeper understanding of how the code worked in order to effectively communicate to the reader, through commenting, what the code meant. It was even more important for me to have organized code since unfortunately I was generally disorganized in the making of my code and I typically had code that in itself was hard to understand. Thus, although it was the case that I was sometimes messy and maybe not organized in the best way in my coding, I was able to make up for it with my quality commenting.
Achieving all of the requirements listed in a software project is no small feat especially since the requirements in a real project can change throughout the process of developing the software. In 1901 and 1902, we were typically given the requirements for our projects right away and we really did not have to worry about anyone changing the requirements throughout the project. However, we had many requirements, especially in 1902. Accomplishing all of these was not easy and required many small steps and a good approach to tackling the program in increments. I usually chose to use a method similar to the iterative approach that we have talked about in lecture. This helped ensure that each of the requirements worked well before moving on to the next step. This really has given me a solid software development foundation that can be built upon throughout this semester.
Even though I can usually wrote code that accurately accomplished the necessary requirements of a project, I definitely was not the best at accomplishing this in a organized manner and I typically had code that in and of itself was hard to understand for the casual reader. This is something I hope to improve upon this semester in 3081W. Sometimes in my rush to get some code into a program, I would not think to do simple things to keep my code easy to understand such as naming variables in easy to understand ways and declaring variables at the top of classes and methods. This would have adverse effects on everyone from the teaching assistants who would guide me in the right path throughout the project, to the graders, to myself when I was attempting to build upon or comment the code in a later stage of the project.
Another big hurdle that I will need to overcome in this class is C++ and its use in projects. Unlike many students coming into the class, I do not have any experience in C++ or even C (which is fairly similar to C++) and this is a setback that could make me struggle to keep up with material presented in lab and any code examples in lecture. I do have some experience with object-oriented programming having used Java last semester but there are still many areas that I am unfamiliar with in C++. For example, the use of pointers in C++ is also a tricky subject that I have not delved too deeply into with my experience in Java. Also, although I do have some experience with classes and inheritance, I do not have much experience with say exception handling or assertions.
So the bottom line is that even though I feel that I have probably been prepared enough to take this class, it will be a very challenging class that will force me to become a better programmer in order to succeed. I definitely look forward to gaining some valuable skills and I would like to walk away from this class with a much better understanding of software development and how to develop code in an efficient and yet easy to understand way. I would also like to be able to add C++ to the list of languages that I know how to effectively program in. Although these may not be easy tasks to accomplish, I think this course will focus on some areas that I could really improve upon and that it will help me achieve my goals!