• Welcome to Computer Association of SIUE - Forums.

Joel on Software - Advice for Computer Science College Students

Started by Mark Sands, 2010-05-03T22:12:10-05:00 (Monday)

Previous topic - Next topic


As a recent-ish computer science graduate and currently employed computer programmer guy, I thought I'd throw in my 2 cents on what Joel has to say (though what he says is very much worth the read):

1: Learn how to write before graduating
Cannot stress this enough! I took Technical Writing my Senior year and thought it was a massive waste of time. But once I got into the workforce, I quickly discovered it was one of the most useful classes I took in college. If there's a technical writing class offered at SIUE, take it. It's well worth your time.

2: Learn C before graduating
I don't think this is quite as important as Joel makes it out to be. I honestly didn't know the "while(s*++ = c*++);" trick (though I do see how it works). If you're familiar with the basic C-style syntax (also seen in C++, Java, PHP, Microsoft-Java-- er, C#, etc), you should be fine. Unless you're looking to head to Silicon Valley after you graduate, you probably aren't going to be faced with some crazy C-syntax question in your interview.

3: Learn microeconomics before graduating.
Also not a deal-breaker. I never took an economics class in undergraduate school and I don't feel like I'm hurting for it. But, as Joel mentions, it certainly won't hurt and can quite possibly enhance your chances of getting a job. Times are tough, so it would probably be worth it to invest in an economics class if you have the opportunity.

4: Don't blow off non-CS classes just because they're boring.
This is a hugely important point. Everything Joel says about how recruiters look at GPA first is 100% true. I've been involved in the hiring process before, and GPA is one of the first things I look at. I knew people in undergraduate school who had a 3.8+ CS GPA, but a 3.0-ish cumulative GPA because they would blow off all their non-CS classes. I also know that several of those folks are still looking for good programming jobs (2-3 years after graduating). If Joel can get an A in Yam-stacking class, you can get a B or better in Basket-Weaving 223.

5: Take programming-intensive courses.
I'm thinking this one is a solution without a problem. I don't know about everyone else here, but I always sought out "programming-intensive" courses. They're fun and often give you the opportunity to get credit for playing with something you might have played with otherwise. But don't neglect theory courses. They often give you the skills needed to enhance your programming skills. Even though there's generally no programming involved and the classes tend to feel unreasonably difficult, computer architecture classes can be extremely useful. To give a quick example, a couple years back, I was working on ordering a bunch of software licensed on a "per-CPU" basis. Even though this software had been purchased thousands of times before, I was apparently the first person to ask about what they meant by a CPU (physical chip, physical core, or logical core?). Thanks, Dr. Fujinoki!

6: Stop worrying about all the jobs going to India.
Joel is right. From my own experience, the exporting of jobs to India by major companies works like this:

-Find a team that you think you can export
-Export it and "surplus" (read: plan to fire) everyone on that team
-Find new jobs at the company for everyone worth keeping

There are a few exceptions to this (I do know some talented folks who got laid off anyway). But for the most part, the system is designed to retain good talent wherever possible. So if you show yourself to be a worthwhile investment, then you shouldn't have to worry about getting exported.

7: No matter what you do, get a good summer internship
This is 100% correct. It's the one piece of advice I give to every CS undergraduate who will listen. Do it. Get internships early and often. The best part is that programming internships often pay. Some of them pay quite well (upwards of 15-20 bucks an hour). There are a number of great internship programs right over here in St. Louis. I did one at Edward Jones Investments. I know they offer them at AT&T and Boeing, also.

And finally, here is a bonus point I have in case anyone is still reading:

8: Join extra-curricular activities
If you're in class for 15 hours a week, and you sleep for 8 hours a night, then you have 97 hours a week left over for other stuff. This extra stuff really helps to fill out a résumé. Don't neglect it. You might also find that it's a great way to build up experiences you can mention in interviews. Also, things like participation in the ACM-ICPC can look really great on a résumé. They can also lead directly to internships and job offers. Some classmates of mine went to the ACM-ICPC World Finals a couple years ago and I know at least one of them got an internship at IBM as a direct result of that success.
Pete Lamonica
Grad Student @ SIUE
Sr. IT Analyst @ AT&T

Mark Sands

In regards to #8: http://rubyhoedown2008.confreaks.com/08-chris-wanstrath-keynote.html for text version: http://gist.github.com/6443

If you don't want to watch the whole thing, fast forward about midway through. But I promise it's a great talk. I've seen it probably 15 times. In fact, I'm going to watch it again right now...  :bored:
Mark Sands
Computer Science Major


I know it is not a popular opinion around here and perhaps off the subject, but what about having fun? Some people refer to college years as the best time of their life. So many of you talk about getting through college as fast as possible, getting a good-paying job, buying a nice car, settling down with a family. I admire and respect it, but what then? Live happily ever after? I am sure all of you will, but you will get older. I know you don't want to think about it now, but unfortunately it is a fact.  Just think about it, you got older since you started to read my rambling. :)

This is my advice. It is summer, take it off, do something you will remember until the rest of your life.

William Grim

QuoteThis is my advice. It is summer, take it off, do something you will remember until the rest of your life.

Not unwise words.
William Grim
IT Associate, Morgan Stanley

Adam C

I agree with about 80% of this, but the rest I fairly vehemently disagree with.  Learning C and knowing how to write are critical, as are internships. Also, there are _plenty_ of jobs available here for skilled programmers, so the India thing is of no concern.

However, not blowing off the non CS classes, GPA, and extracurriculars are, in my experience, incredibly irrelevant depending on the setting. If you want to work for a big company (Monsanto, AB, et al) then yes, you'll need a good GPA and some formal memberships ACM, IEEE etc, will probably help you. On the other hand, if you're looking for a job at a smaller, more agile company, Silicon Valley (or even locally here). These things will not matter at all. Not even a little bit.

Things that those companies look for are skill, previous programming projects (work or personal) and personal skills/chemistry. The biggest, most important thing you can do to get a job is to program, all the time, out of class. If you graduate from here knowing VB, C++ and Visual Studio, and nothing else, you are severely limiting your options. Find an open source project to contribute to, or start one yourself, learn a new language, learn *nix, do something outside the formal academic setting.

My GPA is lousy, in fact it isn't even on my resume, but from my experience and my github profile, I've managed to net myself 6 different job offers, and I don't even have a degree yet. Four of those jobs, I didn't even apply for, those companies actively sought me out because they'd seen what I did, liked it, and wanted to hire me. And you know what? Not once, in any interview has anyone ever even asked me what my GPA was or what classes I'd taken. Not Once.

The CEO of my first company said his biggest regret in life was finishing college, I'm not advising anyone to drop out of college, but I am saying that what you learn in most classes you take, and the letter grade you get attached to it are ultimately useless unless you are choosing a very specific career path (grad school, large corporation etc). Much more useful are things you've actually done yourself, not just because you had to for class. Companies want people with a history of _doing_ and fortunately, we have one of the only professions where there's no barrier to starting that, make sure you take that opportunity.

edit: grammar

Adam C

Also read the link mark posted. Chris Wanstrath is a fairly brilliant guy and has some great advice there.

William Grim

Most of what you say, I agree with.  However, learning C isn't a critical skill at all.  It's merely critical if you plan to go into system development.  Case in point: my girlfriend figured out how to do basic iPhone development in a little over a week, coming from PHP and a degree in graphic design.  She had no prior experience with computer programming outside freelance web development, but not knowing C didn't really hinder her greatly with ObjC.
William Grim
IT Associate, Morgan Stanley

Adam C

Ya i suppose it really depends on what you want to do with your job. If you need to be super concerned about performance and system architecture, more the "engineering" aspects of programming, I would still say you need C. For instance, I had to go in and fiddle with how memcache allocates slabs of memory. I wouldn't have known how to do that, nor probably even where to look or how to optimize it for our use case, without C. Its not that C syntax is super important, but I feel like, as Joel says, learning C forces you to understand how things work at the low levels, and that skill can be invaluable in certain circumstances. On the other hand, if you're focusing on internal desktop apps, or small to medium scale web or mobile apps, you're right, there's probably not a need, I just feel like personally, its made me a much, much better programmer.

William Grim

Well, I certainly agree with that.  I pride myself on understanding it and the principles involved with it at the machine layer.  However, I just don't think it behooves everyone to get so deep into the system to do great works.
William Grim
IT Associate, Morgan Stanley