Since When Did A Nice Case Cost $300?

feature comparison new aluminum macbook with old white macbook

This jumped out at me while browsing the Apple Store today. The two 13″ Macbooks are practically identical on the inside. The new aluminum version’s hard drive is 40GB larger and it contains the newer DDR3 memory. However they have the same video card and the same CPU. These changes may seem of consequence, but with the falling price of memory components Apple is likely paying the same price or less for the DDR3 memory and 160GB hard drive than they were for the corresponding parts in the white Macbook a year ago. Making the internal enhancements essentially a free upgrade for Apple.

All that remains is the case. Which means buyers are paying $300 for the upgrade from plastic to aluminum. That unibody case is nice but that is outrageous! It is easy to see where Apple’s high profit margins are. And I thought it was bad when they put a $150 premium on the black macbook casing two years ago.

The Case For Replacing Java With Python In Education

Around 2003 all of the colleges and high schools in the United States switched from teaching Computer Science courses in C++ to teaching them in Java. The intention was to make it easier for students to pick up programming. Schools were finding that many students were struggling to cope with low level tasks in C++ like manual memory management and pointer references. Instead of learning algorithms, data structures and object oriented programming, students were stuck for hours trying to track down incorrect pointer references.

About four years after the education system made the switch to Java from C++, the whole software industry started complaining about the degrading quality of the Computer Science graduates in the US; which is a topic I explored recently. Ultimately, schools have made the switch away from C++, and they are unlikely to go back, nor do I think they should. Instead, what I want to discuss is why did we have to replace C++ with Java? I can see that at the time, it may have seemed the obvious choice, but looking around the language landscape now there are several choices that I think are better suited for the task. Namely, Python.

Java > Python How???

First, I want to really think about what advantage does learning programming with Java have over using a modern scripting language like Python? Python equally hides the things that make programming in C++ laborious and has many of the nice features that the JVM provides like garbage collection, unicode strings, and threads. The difference is Java is miserable for web programming (Java EE) and equally overly complex for building GUIs (Swing). As a scripting language, Python is far easier to pick and learn.

What CS students would lose from switching from Java to Python

What CS students will gain from switching from Java to Python

Overall, there is no big loss in Computer Science concepts when moving from Java to Python like there was when we moved away from C++. You trade static typing for dynamic typing and compilation for interpretation but everything else is just about the same and you gain Python’s simplicity.

One of the real problems with Java is that many students do not like to use it when programming for fun. Since the majority of students only become competent in Java, they only code they write is for their homework assignments. These are type A CS students. There is a second, type B, group of CS students. Type B students pick up another language like PHP, Python, Ruby, Clojure, etc. and are ones who spend time coding and creating cool things outside of their schoolwork. These students find programming on the side to be the most enriching and also the most educational. Employers often cite type B students, the self starters, as the ones they are most interested in hiring. If the only programming a student does while attending school is for their class projects, it is more than likely that they will continue this practice once leaving school, only writing code for their job. By making the switch away from Java in education, more type B CS students would emerge from American universities; enormously benefiting the software industry.

New Year’s Resolutions for 2009

I realize that it is about a week late to be posting New Year’s Resolutions but I figure better late than never.

My resolutions for 2009:

  1. Take on fewer projects. I have a tendency of getting involved in just about everything. Too often I eagerly say “Yes” to a for-fun project, contract, or job without really thinking about whether I have the necessary amount of time to devote to the project to make it a success. For a few months I need to instantiate a “project-freeze” until I can bring some closure to the myriad of things currently clogging up my to-do list.

  2. Look at where I am spending my time and decide what is truly important. Stop spending my time on the things I think are important but really aren’t. I just finished reading the book Predictably Irrational by Dan Ariely. The eighth chapter is titled “Keeping Doors Open: Why Options Distract Us from Our Main Objective”. In the chapter Ariely explains how people have this irrational behavior to keep as many options available to them as we can. Even though this behavior diverts our energy and commitment away from the doors that should be left open and that we are better off when we close as many doors as we can and focus on the ones that are the most valuable. For most people, including myself, deciding which doors are the most beneficial is a not easy because, as Ariely states, some doors are tied to my dreams or contain the promise of leading to a better career. Therefore I need to be rigid in closing doors if I really want to focus on what is important.

  3. Get better at finishing what I start. Since I have been starting too many projects in the last year and getting involved with too many things, I have fallen into a really bad spell of not finishing many of the various projects that I start. By spreading myself too thin I have become ineffective as a programmer. But I believe that if I am able to stick to my first two resolutions, then finishing the things I start will follow.

  4. Exercise with Wii Fit on a regular basis for the entire year. I am not overweight or out of shape so when I say that I need to exercise it is not to lose weight. Instead I want to see how my body will improve if I do exercise regularly. And I say exercise with Wii Fit because that is the only method of exercise that is convenient enough (I don’t have to leave my apartment) for me to do it for a prolonged period.