Sunday, December 4, 2011

The End

                    On Friday we took the last software engineering test. I had mixed feelings about the test...I thought it was better than the second test, but now I'm having a few doubts. I'm not going to think about it till we get the grades though.
                  Overall, I think I learned a lot from this class. I think it has helped me a lot with programming languages concepts, and with some software engineering principles. I think I learned more about Java in this class than at any other class at UT (and most classes at UT are taught in Java!). I also liked learning a new language, Python. I may not be super comfortable with all the python concepts yet, but I am confident that I can write code in python without getting stressed out.
                On the Software Engineering side, the book Extreme Programming was very interesting. I kept applying all the principles mentioned in it to my internship over the summer, and thought of a few ways about how Extreme Programming might have helped me in the internship. Some of the articles were really informative, as well as interesting reads. However I thought a couple of  "What to do in College" type articles were more suited to a freshman class. Unless those articles were meant for us to retrospect? Having quizzes in every class forced me to read the quizzes, study a bit before class, and make sure I am not late for class. As annoying as this was, I am glad about it, since it instilled a discipline in me.
              This was the first time I wrote a blog, and I enjoyed it. I love writing, although, I think some of my blogs for this class have turned out a bit dry. This was also the first time I used Google Project Hosting, for the issue tracker. This turned out to be pretty useful during the last project. I also learned to use git better, and I started using git for my other pair programming projects too. This was the first time I was involved in making a website, which was really exciting. I also thought I learned a lot about group dynamics, which will definitely help me when I start working in six months.
           One suggestion I would like to make is that the tests, reading and classwork is very disjoint, which leads to poorer performance on tests. Maybe if all three were integrated in some way, the class would be even better than it is now.
            I am glad I took this course, I learned a lot, and I would like to thank Professor Downing for being a such a good teacher!

Sunday, November 27, 2011

Second To Last Week!

           The time has flown! As always! The coming week is the last week of classes, and we only have one real Software Engineering class. Friday is the midterm, and no class on Wednesday! Tomorrow, we have another round of presentations - our team is the last one to present. I am sure that by the time we get to our presentation, everyone will be sick of hearing about the issue tracker, but I think we will say a few words nonetheless.
         I thought it was astonishing how all our points for the presentation are based on what the other students give us. I hope no one is spiteful, and everyone grades fairly. The last two presentations were interesting, I liked to hear other teams' take on the same project. It is interesting how the same goal can be achieved in so many different ways!
       For tomorrow, we had to read another Joel Paper. This one was on interviewing, and although it was addressed to interviewers, I think it had a lot of value to interviewees too. The biggest thing that I got out of it was that as an interviewee, you should show a lot of passion for the work that you are doing. Which is pretty easy, providing you do not stay too uptight during the interview. Another thing that is obvious is that on easy questions interviewers are looking for speed and accuracy, while on hard questions they are looking for the thought process.
     Anyway, I already have a job lined up after I graduate, and won't have to interview for a long time! But these tips are good to keep in mind anyhow. Looking forward to finishing up the presentation tomorrow.

Tuesday, November 22, 2011

Extra Credit Special Blog

This blog is about an article Is Design Dead? written by Martin Fowler.
While reading about Extreme Programming, I was confused about the role of design in Extreme Programming. This article sheds some light on the design principles in Extreme Programming. This article also explains the differences between planned and evolutionary design.
Next semester is my last semester at UT. After I graduate, I am going to work, and so I am interested in reading articles that have relevance to design and programming practices in the industry. This article falls in that category.
            According to Martin Fowler, the more common design technique is evolutionary design.  As the name suggests, design is continuously evolving and changing as the system grows. However, this means that virtually there is no design, since design is not constant.  This leads to the “code and fix” nightmare which means that as the project progresses in time, expense of fixing bugs grows exponentially. As a contrast to evolutionary design, planned design is thought of in advance, before the start of the project. Often the team designing the project is different from the team implementing the design. However, planned design has its disadvantages too. The most important disadvantage is that requirements do change. The customer never knows what he wants and will always want more features. I experienced this first hand during my internship this summer. The customer demanded that certain features should be implemented, that had no hardware support. It fell upon us, the software team to design a solution to the customer demands. Thus, I agree with the statement that requirements are always changing, and that it is not viable to fix upon a constant design at the start of the project.
            After I finished reading the first section of the paper, I was a bit worried.  He mentioned two design patterns, and both of them seem to have grave problems. However, there was still half the paper to go, and extreme programming to look forward to. I was interested to read on.
            According to Fowler, XP advocates evolutionary design. From what I read about XP, this seems to be true.  Now, to me it seemed weird that such a flaky design pattern would be adopted by Extreme Programming, since XP seems to have quite a few followers. However, Fowler tried to explain this. He said that the principles of Extreme Programming mitigate the risk of evolutionary design. The risk of evolutionary design is that as the project gets older, it becomes more expensive to make changes. However, XP practices of Testing, Continuous Integration and Refactoring flatten this change curve.          
            This again builds on what I thought about XP in the first place. For Extreme Programming to work, all the practices of XP need to be followed. If not, then extreme programming won’t work. Simple design is a requirement of Extreme Programming.
            Design Patterns are reusable solutions to common problems in software design. Fowler advocates the use of Design Patterns in Extreme Programming too. He advises extreme programmers to invest time in learning about patterns, concentrating on how to implement patterns in their simplest form, and to be able to remove patterns if they aren’t performing their job.  I think that this is in general good advice, to follow, whatever type of programming you are doing.  Professor Downing touched upon some design patterns during lecture last week, and also showed us a couple of books to read on design patterns. I’m interested to read one of those at least over the winter break.
            In conclusion, I want to reiterate what Martin Fowler suggested was Extreme Programming’s take on design. XP design looks for skills like refactoring, a strong knowledge of patterns, knowing how to communicate the design to the programmers. XP design depends on knowing that decisions are going to change in the future, and that code should be as clear and simple as possible.
            I think this paper helped me understand design principles in general, and how to reconcile design with extreme programming. It gave me a deeper understanding of extreme programming, and helped make me ready to face the workplace.

Sunday, November 20, 2011

Singeltons

       The past week was probably the hardest week conceptually for me in class. We covered topics like singelton classes, and reflection. Since these topics were really new, and hard to imagine for me, I was a bit overwhelmed. But I read more about the singelton design pattern here. Reading about the real world applications that need singeltons helped make the concept clear to me. The page also talks about how to make singeltons thread safe, which is interesting.
      The second big topic that we covered was Reflection. I am still quite hazy about this, and am not confident enough to write about it yet. I will go to office hours and will hopefully understand reflection enough to blog about it next week!
      Our project was due on Wed, and this time was smooth sailing. We were mostly done on Sunday, and all we had to do on Wednesday was refine the technical report and the powerpoint presentation. We are presenting next Monday, so we have the next couple of days to practice our presentation (since most of next week is Thanksgiving!! :) ) I am so glad that this class makes us present, I feel like it is so important to have presentation skills. Working hard is not enough, if no one knows what you have done. I believe that marketing your product is just as important as having an awesome product. I am glad that I am getting a well rounded education at UT!

Sunday, November 13, 2011

Miscellaneous

         This week, I was sick on Monday, and left class after the quiz. Unfortunately, I missed the lecture about dynamic binding in Java and the Java virtual machine, so I felt rather lost on Wednesday. I realize how important it is to go to lecture, because concepts are just easier to understand when they are discussed.
       I think the concepts we went over this week are really useful. Every week I marvel at the fact that I thought I knew Java so well, but I only seem to have scratched the surface of this language. I know that this is a class in Python, but I am getting more out of this class in Java.
         The third part of the World Crisis Project is due on Wednesday. "Search" seems to be the only real functionality that we need to add. I think we are almost finished with that, and so we are going to add some "special features" to our website in the next two days. We have been working on the presentation, but are kind of confused what to put in the Powerpoint, since most of the presentation seems to be demos of the website and also the issue tracker apparently. We are also working on fixing the technical report. I am a bit confused about this, since I thought the TA was going to critique our first draft, but he only gave us a one line review of the paper. I am hoping that the rest of our paper was just fine.
       I am looking forward to finishing the World Crises project and ending the semester on a good note. Three more weeks to go!!!!

Monday, November 7, 2011

WC 2 and Refactoring

        This week we started talking about Refactoring in class. We did the examples that Martin Fowler had in his book about the video rental store. I found this much more interesting than the book, and a much better learning experience.
        Reading code written in a book can be tedious, and I sometimes find myself skipping over the code examples that Fowler shows. I catch myself in time, and re-read them, because they actually show what is going on. However, doing the examples in class, in an interactive manner, is much more useful. Coding is supposed to be a hands on process, I don't think anyone can learn to code by just reading about it. I also think it is hard to remember all his rules about refactoring, I think refactoring is something that is very intuitive and doesn't need an actual Rule-Book.
      The second phase of the World Crises project was due last Wednesday. This was harder than the first part, since the website needed to be dynamic. I worked on the UML diagrams, which was a lot of fun, and also on the merge import. No one was really sure about what merge import was supposed to be doing, and we needed to get it clarified from various sources. This kind of showed me what it is like to work with a customer, and not know what the customer really wants. There should be open communication between the customer and the programmer, in order to give the customer what he needs and wants.

Sunday, October 30, 2011

Of World Crises and Underbars

           The second part of the World Crises project is due on Wednesday, and we spent a major part of today working on it. Since we want to maximize our learning, and get the most out of this project, we decided to switch roles in the team. Everyone who worked on the back-end last time is working on the front-end this time, and vice versa. Last time I worked on more of the front-end, and I was a bit disappointed not to be working on front end for this part, because in this phase we get to make our webpages dynamic and PRETTY!! Oh well, maybe next time....
           I am interested in the back-end stuff too though, since it is all new to me, it is really exciting. I had a lot of fun with the UML class diagram, and no, I am not being sarcastic. I just wish I had more time to learn more. As it is, I am going to end up doing just enough to complete all the requirements of the project, since this is a really busy week for me.
           The last week in class we compared Java classes and Python classes. I think I even had a dream about naming stuff with _className__variableName, which wasn't pleasant since I dislike __s. But on the whole I found the discussions useful. I think this class is a really good introduction to Python, and it makes me want to take OOP next semester just so I can feel comfortable with C++ too.
         We had to read five chapters of the Refactoring book for Friday. What I got from the book is that the author seems to be good friends with the Extreme Programming guys, and they all seem to love to repeat themselves over and over and over again. But I did like how he had a lot of examples in the book, I find that a really good way to learn something.