This class has been quite interesting to me so far. I feel that, by the time this class has ended, I will be much more proficient in software design. Reading through the expected course outcomes, I find a lot of topics that I don't know the first thing about. There are also a few topics I feel I grasp quite well.
The few things I do grasp quite well include "writing loops, and code in general, that are easy to understand". I learned to write clear and precise code the hard way a few times in CSci 1901. I wrote some really ugly looking stuff in that class. Looking back on some of the different assignments now, I can't even tell what I was trying to do. My grade suffered a few times due to that. So, for the most part, I am now very careful to write code that is readable and easy to understand.
Hand in hand with writing clear code, I think "writing effective comments" is an essential part of making readable code. Sometimes, no matter how well you design, things just get hard to understand when working with complex data structures or really in-depth algorithms. That's when effective commenting can come into play. I used to have a problem with over-commenting my code. I specifically remember typing "Increment 'i' by one" in one of my 1901 assignments. I don't think my grade ever suffered from that; but, I now understand that the target audience of my comments should know what i++ means.
While reading through the expected course outcomes list, I realized that there is a lot I have to learn. One of the topics I'm most excited to learn about is "integrated development environments". I have messed around with a few different IDE's, but have never really used one for actual work. I started off this semester thinking I could teach myself how to use "Eclipse" to write the C/C++ for this course (and others). I have since come under the impression that Eclipse is more for Java development than C/C++. If anyone decides to comment on this blog (and knows a thing or two about IDE's), I would greatly appreciate a push in the right direction.
I am also excited to learn about "designing a useful class hierarchy" and "modular software design". I feel that the other computer science classes I have taken have touched on this topic slightly, but never covered it with great depth. Its obvious that most programs aren't designed in one big file. So, it would be useful to know how and why real-world applications get the structure they have.
Other things in the list of topics, such as UML and context free grammars, I don't know the first thing about. I hadn't even heard of UML or context free grammar before attending this class. I am somewhat excited to learn about these topics, I'm also a bit worried. Having the book "UML Distilled" leads me to expect we'll cover the topic thoroughly, and I don't know the first thing about it.
All in all, I'm very excited to work my way through this class. Learning about all these topics in one semester won't be an easy ordeal. By the time this class is done, I expect that my opinions and skills pertaining to program design and development will be greatly changed. I believe that having the core skills taught in this class will be an invaluable tool for my future classes and careers.