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.

Measuring the Efficiency of Email

Death by Email

Since July I have been using an application called RescueTime to track my computer usage habits. It records how much time I spend using each application and visiting websites. This information is useful for me to monitor how much time I am blowing on Twitter and how much of my 8+ hour work day (when I was working) I was actually spending on programming.

One of the features of RescueTime is that it lets me set efficiency values between -2 and +2 for my Apps. So for example, I marked TextMate as being +2 efficiency, Adium and Skype as -1 efficiency, and Facebook as -2 efficiency. Then RescueTime aggregates all of my usage data, and generates an overall Efficiency Score based on the efficiency values I assigned. If my overall efficiency score is above 0 than I have been productive, if it is below 0 than I have been generally unproductive.

So far I have assigned all of my “most used” applications and websites and efficiency value…except for my email client, MailPlane. When it comes to rating the efficiency of my time spent writing and reading emails I am conflicted. While email is necessary to getting many things done, it is a lot of time not spent working towards my main objective which is programming.

Writing emails is what particularly kills me as it consumes far more time than reading emails does. Writing good emails that provide actual value is difficult and I can easily spend 20 minutes writing and rewording an important email. If the amount of email I dealt with was low this would obviously be less of an issue but I estimate that I send an average of 40 emails every week, half of them being during the weekend.

I know that this amount of email writing is nothing compared to what many people deal with but for a college student who writes code on the side, writing 40 emails every week is a significant time sink. According to RescueTime, I have spent 110 hours using my email client since RescueTime started monitoring on July 21st. Making it my most popular application (Adium is second, followed by TextMate).

Email, A Necessary Evil So the problem I am left with is, how do I rate the efficiency of a necessary evil? I can not stop writing email because then I would not be fulfilling my other responsibilities, like my role as ACM President at UCI. If I give MailPlane an efficiency rating of +1 than time spent writing emails is going to boost my overall efficiency score so that even if I’m not writing any code RescueTime is still going to tell me I have been efficiently using my time. If I rate it negatively and give MailPlane a rating of -1 than I am never going to be able to dig myself out from negative territory on the overall efficiency scale. I already have Adium, VLC, and Facebook bringing me down enough as it is.

In the end, I feel that 0 is the most appropriate efficiency rating for a necessary evil. Thus it does not hurt you to be doing it but it does not help you either. I think a good solution would be for RescueTime to add a goal type where I can specify that on any given day, my goal is to use TextMate for longer than I use MailPlane. RescueTime deals in tags and categories so really it would be to use things tagged “dev” for longer than things in the “Comm (Email)” category but it is the same principle. That way I can challenge myself to spend more time writing code than emailing without having all my other activities interfere.

My ICS Video Profile

The communications/media team within the Bren School of Information and Computer Sciences put together this great video that showcases how my education at UC Irvine has benefited me. It features the hITEC product development competition, my involvement in student government, and my internship at TechCrunch. Props to Eric Kowalik and Bobby Farmer for doing an exceptional job with the video.

← Previous PageNext Page →