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.

Sunday, October 23, 2011

Exam Week

          The second exam for Software Engineering was on Friday, and my whole week was spent getting stressed about the exam, and trying to prepare for it. I re-read all the papers and the Tom Jewett Database book, and compiled a detailed cheat sheet. However, to my surprise and slight disappointment, the test only had three questions from the readings! There were a bunch of programming questions, some easy, some which required a bit of thinking. Overall, I wish I had had more time for the test. I think an hour is too short a time for a programming test. The Haskell part was surprisingly easy for me, I think my CS 337 class helped me a lot on that part. Oh well, I will know how I did on the test in a week.
       The beginning of the week was about the WC project. As project leader, I wanted to make sure that everyone was on top of their piece of the project, and that no one felt overwhelmed with work. This involved writing a lot of emails! But on the whole it was fun, I enjoyed it! The project itself was interesting too, I like learning to use new tools, and the Google App Engine seems like a really useful tool. I noticed that you can pay them a nominal fee to get your own domain name, which would be useful if I want to make my own website in the future. I hope that by the time we finish all the parts of the project, I will be really familiar with the Google App Engine.
      The aspect that I enjoy most about this project is that I am getting to work on so many things that have interested me, but I have never worked on before. I have never built a website before, and I am really excited to help make our website user-friendly, and impressive. I definitely like the projects in this class much better than the tests!

Sunday, October 16, 2011

Miscellaneous

            This class teaches me so much about programming languages! I now know stuff about Java (and Python) that I hadn't even thought of before. This week made me realize how easy it is to use a programming language, without even knowing some of the basic characteristics of that language. From now on, I am definitely going to investigate the actual ways in which a language functions. I think that will definitely help in improving the quality of my programs. One of the cool things we talked about in class this week was regular expressions and pattern matching in Python. I think that is really fun, while also being useful of course!
           On Friday, we went over the big Os for inserting and removing elements from the beginning, middle and end of different containers. This was mostly a review for me, but it was useful since most interviews tend to ask a few questions about Big O. To recap, array lists are the best for removing and adding elements to the end, indexed look up in an array list is also constant time. Linked lists are good for removing and adding elements to the beginning or the end, with an O(1), however lookup is expensive in a linked list, O(n).
             This weekend I worked on the project, which is due on Wednesday. I like having a big group of 6, since one person doesn't have to do too much work! We divided the work equally amongst all of us, which seems to be working fine as of now.
             The second test is already upon us! It is on Friday, and I want to start studying early for this test since I know that we have covered a lot of material.
          

Sunday, October 9, 2011

Packing and Unpacking

            This week, we learned some more about the weirdness of Python. Python has named arguments, which means that you can name the arguments in a function call. This is nice because it gives more clarity to the function call if the arguments are meaningfully named. However, this functionality could be a pain if some function header needed to be changed. Changing the function header requires all the function calls to also be changed, which could mean a lot of time-consuming work. Python also gives us the feature of declaring default values for parameters, like C++. And then the weird part comes in. Python can take in an iterable item as an argument, if it is preceded by a *. This iterable item is then unpacked into its corresponding elements. Conversely, python can also pack elements into a tuple, if the function header lists *something as an argument.I am assuming that these are useful features to have in a programming language, since python clearly has them! I haven't thought of a good way to use them yet though.
            On Friday, Professor Downing described the group project that we will be working on for the rest of the semester. I liked the idea of a website that focuses on collecting and imparting information on the current natural disasters. This seems like a project that will have some application in the real world. I have never worked on websites before, and I am excited to begin this project! I hope that working in a group won't be too hard; the git repository at least should make it somewhat easier. We should all remember to push changes frequently though, since merge conflicts are really tedious. I had to face a couple of merge conflicts with git at my internship this summer, and I did not appreciate the time I had to spend to go and fix those. I think working in a team of 5 should be easier than working in a team of 20 though!



    

Sunday, October 2, 2011

Netflix

           I learned something cool about Python in class this week. While talking about how to calculate the RMSE, Professor Downing showed us how to write the program in one line. Python lets you condense most expressions, so code looks very compact. I don't know how readable it is though, I myself would not feel very comfortable trying to decipher complex Math in one statement.
         This week started out with talking about the Netflix project and then moved to operators and how Java, Python and Haskell handle different operators, and have different expectations about l-values and r-values. The concept of l-values and r-values was new to me, and I found the exercise in class about whether an operator expects/returns an l value/r value, really interesting. For example, increment operators in Java require an l-value and return an r-value.           
         The Netflix project was one of the more interesting projects I have worked on this semester. I had heard of the Netflix prize of course, and I was excited to try it out myself! It looked really challenging in the beginning, but I was surprised to find that it did not take my partner and I very long to get an RMSE less than 1. It was fun trying to manipulate weights and figure out other ways to get a lower RMSE. We already finished the project and turned it in, and its due on Wednesday! In the past, whenever I have had to pair program, I have always worked with my friend. We are really used to each other by now, and are comfortable with each others style of coding. For this project however, we were not allowed to work with the same partner as last time, and I had to work with a stranger. I was a little apprehensive at first, but I was pleasantly surprised that it was pretty comfortable working with someone new. I applied the concepts of pair programming that we had learned, with satisfying results.