Sunday, June 29, 2014

Week 3

Class:
Things are starting to get a bit more tricky when it comes to quizzes on Python. We are now getting into depth on how certain objects in python behave, especially when they are iterated over. Before this week I never used to look over notes from the previous class to do well on the quizzes but it is now becoming almost a necessity as Im starting to miss a couple of points here and there. It shouldn't be anything hard to recover from but I need to stay on top of it. The exam is coming up soon and I feel it might be time to start looking over notes from the past two weeks to make sure nothing catches me off guard.

Project:
The Netflix challenge was a lot of fun. Not only was it relevant to real life assignments where a company might ask you to generate a rating system for their products but it was also an opportunity to take advantage of python's speed and flexibility at scripting. I learned more from writing scripts to generate caches than I did from actually trying to beat the Netflix RMSE. When my partner and I started the project we felt really good about our ideas on how to get below an RMSE of 1.00. The obvious idea was to calculate the mean rating for every movie and the mean rating that a given customer would give out. Given the movie ID and the customer ID, one could simply query a cache and take the average of the two values. This got us down to 1.001 which was just out of reach for getting a non-zero grade. We then calculated the medians instead of the means and used a similar approach which got us to just under one. But we didn't stop there. The paper listed on the project page was the key to getting under 1.00 and based on the fact that the professor never really stressed reading it, it is my assumption that he wasn't counting on many of us reading it. Regardless, that paper outlined how to get under 1.0 and if you caught the professors hint about using averages from specific decades then you could easily get the bonus points as well which we were able to do.

On to week 4 :)

Sunday, June 22, 2014

Week 2


Project:
With Project 1: Collatz out of the way I'm feeling pretty good. I managed to rank 6th in the class on leader times for the problem on the sphere ranking page. I would have tried to cut down my time even more and perhaps even tried to get the extra credit for the collatz v2 problem but alas being in both classes means you have to proportion your time appropriately. Collatz proved to be a great learning experience in terms of templates. I am absolutely in love with the way the professor broke down the templates to help us adhere to good software engineering ideas like TDD (Test Driven Development) and setting up a run harness. My Netflix partner Angela Hsu and I have been working hard this past week applying the same principles to the Netflix challenge that is due this upcoming Thursday. When the professor revealed the problem on Thursday I must admit I felt a little overwhelmed but after spending the past few days grinding away at the keyboard kicking out caches I feel comfortable that my partner and I will come away with a really good grade.

Class:
We are now digging deeper into the intricacies of Python as we learn about the different types the language supports. We finished up last week discussing various ways to make loops faster which was very useful for me since I spent this past weekend making caches for the Netflix project. I am very curious to see how the next week plays out and more importantly whats on the agenda in terms of the bigger group project. I made a dynamic website last year and it seemed very involved with multiple technologies and languages which makes me a little worried as to how involved this project will be. The quizzes seem to be getting progressively more difficult as time goes on.

General study tips continue as follows:

1) Print off the class slides (he updates them usually the night before) to take notes on... trust me, the exam will be a longer version of the quizzes

2) Do the readings... focus on the key ideas, they show up as easy points on the exam

3) START EARLY ON THE PROJECT

Sunday, June 15, 2014

Week 1

Let me first share why I am taking this class. As a computer science major I need this class to graduate as it counts for a writing elective. But that is not the only reason. I took a class from Professor Downing in the Fall of 2012. The class was called object oriented programming and was taught in C++. Since my first language was Java, and since I was also enrolled in the infamous CS 439, I found the course very difficult and ended up dropping after bombing both midterms. However, I realized that even though this was one of the hardest classes I had taken, the professors teaching method was solid and I knew that taking such a class would guarantee real proficiency in becoming a developer.
During the first week of this class the professor has right off the bat made it clear that he is more interested in making us employable rather than just eligible masters candidates. As I had been interviewing for the past year many employers had asked me about SOLID principles which appears on the schedule and about which we will learn at a later time. I bring this up because it is important. This class is designed to bridge the gap between what professors in computer science teach (mostly theory) and what employers expect (give me a program that I can sell). I admit that I am pretty bummed that this class is being taught in python. Many employers in the finance industry (in which I will be working as of September) value time as money and so they want code that runs fast. As a result they expect proficiency in C++. Python is picking up popularity though because companies want the analytical abilities of Matlab without having to buy licenses and there are a good set of libraries written in python for such work. I was hoping that this class would be taught in C++ so I could get more exposure to the language but I guess thats why I am also in CS 378 Generic Programming in the STL. It is however important to understand web technologies in the world we live in today. Learning Python, JavaScript, and Django for this course will definitely help me diversify my resume and I look forward to creating a useful website by the end of the class.
Just in the first week the professor has already gone over the importance having a portfolio demonstrating our abilities and obtaining a good summer internship in order to become more employable. In particular the professor has introduced us to the importance of developing in a certain format which requires us to first write test code thus helping us as developers narrow our focus to write passing code that only passes those tests that we have already written. The added benefit of working under this kind of paradigm is that if and when we run into a bug, it is always easy to simply run our test cases quickly to find out what errors our new code produced thus substantially reducing our debug time. Over the course of the semester I look forward to seeing how SOLID principles are applied to the C++ language and more specifically the intricacies of the STL.
A word of advice to other students planning on taking this class. Print off the slides that the professor will go over the next day in class. He usually puts them up the night before the class. Bring these notes to class and take active notes. This ensures that you won't forget about the small details that the professor mentions when he goes through the slides since laptops are not allowed. This is very good advice coming from someone who has taken his exams before.