In an earlier question, I asked for career advice for new software engineers who did well before and during college. But what about people who weren't fortunate enough to go to MIT or Yale, for whatever reason? What if you went to what Joel Spolsky calls a JavaSchool?

What can/should JavaSchool alumni do to develop their skills and make up for the things they missed in college? (Or, was Joel wrong about those schools being disadvantageous?)

  • Read.
    – Shog9
    Sep 9 '10 at 23:18
  • 4
    "Don't let schooling get in the way of your education" - Mark Twain
    – BlackJack
    Oct 2 '11 at 5:40

Despite the claims made by Joel in that article- and he concedes the point himself- a lot of the subject areas that may be missed by a "JavaSchool" are not necessary of many jobs.

I attended something that I suppose resembles a JavaSchool in that we spend most of our time focusing on high level languages like C# and Java, but that doesn't change the fact that "Algorithms & Data Structures" is still part of the required class list- not to mention all of the other theory-oriented classes. Granted not all "JavaSchools" are the same, but that isn't the point.

In my opinion, more important than an understanding of some of the grittier development topics is being able to problem solve effectively when unique challenges arise. As software engineers we do the vast majority of our learning on the job and as such, two of the biggest aspects of our job description are being able to problem solve and being able to pick up unfamiliar concepts. If, during an interview, one is unable to make a discernible and logical attempt at solving a problem which is new to them, then their incompatibility for a given position will likely reveal itself.

Obviously, when hiring someone for a position that requires constant exposure to and use of some intricate topic that may be missed by a JavaSchool, it is often the logical choice to go with someone who has a prior understanding, but lack of experience shouldn't always preclude job eligibility.

More than likely, the 50 year old Java guy at your company that has been there for as long as anyone can remember did not have any understanding of Java until his job (current or previous) asked him to learn it- and he did so. Strictly speaking, it's bad practice to fire "the old guy" so that a younger and more "up-to-date" candidate can take his place; that being said, if the job description for any employee young or old changes, it is the responsibility of that employee to get caught up or find a new job. Just because an individual (especially a programmer with past experience) doesn't understand some concept, doesn't mean they are unwilling or incapable of learning it. In fact, if they are unwilling to learn then they probably do not belong at any job- much less yours.

It's fair to say that some "JavaSchools" are better than others, and that fact should certainly be considered when selecting a candidate for a position, but there are a lot more important personal traits than just where someone went to school.

It is our aptitude to tackle a problem and find a solution that defines us as engineers, most everything else is secondary.

  • +1 "It is our aptitude to tackle a problem and find a solution that defines us as engineers, most everything else is secondary."
    – Bill
    Nov 19 '10 at 16:53
  • I attended a school where programming languages were seldom approached (we did have a basis of C/C++/Java, sadly no functional language), and we only get passing acquaintances with CS theory. On the other hand, we talked about databases, data-mining, phone/mobile/internet networks, human-machine interface, etc... We learned in breadth, rather than in depth. I don't think it was a bad deal :) Oct 2 '11 at 16:31

Why not work through a textbook that introduces programming differently from how you learned it? For example, there are several good, free books that use the functional paradigm. How to Design Programs is very approachable. The classic Structure and Interpretation of Computer Programs (http://mitpress.mit.edu/sicp/) is less so, but does provide a profound sense of enlightenment.

I highly recommend watching the first couple of Abelson's SICP lectures for a different perspective on what computer science is. They're older but have aged very well (http://video.google.com/videoplay?docid=5546836985338782440#).


I feel your pain, as I went to a JavaSchool too. Mine is actually ranked fairly highly in the UK for what it is, even though students in my year didn't get a single Data Structures class. I was lucky enough in that I was able to pick up DSA as an optional course due to administrative errors with my course, but that's another harrowing story...

In my experience you'll experience something in a JavaSchool that you won't experience in top universities and that's the student that wants to prove their worth. Just like with any other ancient or red-brick university in my country we had the typical slackers and the decent performers, but there was a small group of students that were aware of their surroundings and what they were missing in their education. Inevitably, these people didn't necessarily do brilliantly in their course, but they left university knowing more than everyone else. We interned in whatever software companies would take us during any breaks we had, we picked up the languages we were never to be taught and we studied the subjects that others avoided because they were hard.

From my friends, two of us are carrying on our studies to Masters level, picking up on all the advanced courses on where we felt we entirely missed the foundation, and one guy is hoping that his recent interview at Microsoft will result in a full-time job. I am about to start my Masters degree soon, primarily to fill the gaps in my education and to spend one more year building the skills I'll need to maximise my potential in this industry.

In the real-world people will always hold these biases, and more often than not they are completely founded on truth. If you feel your school is inadequate tell them, and use sites like this to build your level of education.


Well, you can get a job writing software in Java. So long as you are good at what you do, the school you went to and/or your major isnt terribly relevant past the first job, if even then.


Best thing I can think of is to go and (re)learn programming in a completely different paradigm, in order to break free of the object-oriented way of thinking.

I'd suggest at a minimum:

  • Assembly language, to get a real appreciation for how the machine works
  • Haskell, for a very pure view on functional programming
  • Lisp, for impure functional programming and metaprogramming (Clojure would be my first choice, but Scheme or Common Lisp are also great)

Not the answer you're looking for? Browse other questions tagged or ask your own question.