I don’t really recall why I avoided Java all this while.
Few weeks after arriving here at Brown, I learnt Brown is, what they call, a Java school. That’s probably not completely true, but for a vast majority of students that take Andy’s intro class, CS15, it is. I have come to realize it is not such a bad thing (quite the opposite).
I remember my first few weeks at college when I was trying to teach myself Java in the CC (whoa, they have a website now!). I had struggled to download the latest edition of Java (with NetBeans IDE) and had it installed on one of the systems with the help of CC staff admin. Then, somewhere down the line, the focus was switched to learning HTML & CSS properly as I took up the challenge of building a new website for the CSE department.
As I look back, NITC was a C school. Our intro course was taught by a faculty member from Civil department and, yes, we were supposed to code in Turbo C++ IDE. I knew better at the time and was using GCC on Linux. What I did not know about though was STL and why it was important that I learnt it as soon as I could. Course assignments and labs, over the next two years including Data Structures, Compilers, Networks, Operating Systems were all done in C. One exception was the lab on Programming Languages which was done using OCaml, but there wasn’t enough of it with just 4 visits to the lab in one whole semester. In the final year, when a lot of students did projects with higher level languages like Java or C++, I chose to work on GCC (C again). Next two years of life were spent getting a sense of and maintaining a a part of a huge C codebase for a large and fairly old company. Long story short, I had become just a C programmer, whether I liked it or not.
Well, not quite, there were certainly smaller adventures played out with Python and couple more attempts to learn Java (some Head First Java during summer of ‘12; the remote internship for which I actually wrote some production Java code; and, a little bit of Androidy-Java about a year ago). But shorter stints are not enough to learn a language. Moreover, anyone who does Java/C++ can tell you what a pain it is to use C which lacks containers and algorithms in its standard library. In my own experience, it is always dreadful to think about implementing your own data structures each time you work on a non-trivial program. Further, it prevented me from thinking at a higher abstraction level when it came to solving problems (lost in detail, as they say).
As it turns out, I am going to TA CS32 in the next semester, which is a Java class and I wanted to prepare myself for the same. This is what I am doing in the break:
EDIT (Jan 4 but updated here on Mar 8):
Shriram pointed out that Brown is NOT a “Java school” per se and that both intro sequences (15/16 and 17-19/18) contribute 50:50 to the number of students who go on to major in CS.
My take is that indeed it is not a JavaSchool as Joel Spolsky would describe the term but most Brown students are expected to know Java, whether they come from 15/16, 18 or transition from 19 to 32. Even couple of systems-like courses (DBMS 127; Multiprocessor Sync 176 that I took) depend on Java.
To be fair, there is a great variety of options here. I was just astonished to see the amount of detail 33 covers for an intro systems course (I attended latter half of the semester). Then, of course, there are 17, 19, and C++ heavy 123. This semester, I am enrolled in 167/9 (OS) which is the extreme to which I would imagine a systems course could go to (we just implemented user level threads packages for both uniprocessor and multiprocessor systems, more about this in a later post).