the woes of CS job seekers
Every few months, a question gets asked on Slashdot
, something along the lines of "I just graduated, how do I get a job?" One such discussion
is going on now; the user's (shortened) question is "I'm a recent college grad (B.S. in C.S.) and have been on the job hunt for about 6 months [...] After looking through hundreds if not thousands of job postings, everyone is looking for 3+ years of network admin experience or 5+ years of C++ experience even for an entry level position. How is one expected to gain that kind of experience when no one will hire you without the experience? What kind of (part-time) work can you get as a college student to gain experience (Cisco, Exchange, SQL, etc) that will be marketable in the real world?"
Reading questions like this one, and the resulting discussion, makes me happy about two things in particular:
1) Although I hate my job, I don't have to look for a new one
2) I have a liberal arts education
Reason number one isn't relevant to the discussion; my disdain for my job is my own doing, and not leaving is my own choice, blah blah. Let's look at reason number two. I have zero formal training in the type of work I do, the type of work that people felt I was good enough at doing that they've paid me to write several books about it. To that end, I really feel the answer to the question "what can you do as a college student..." is: learn outside the classroom, synthesize, and start your job hunt a few years before you are going to graduate.
I don't mean to suggest that computer science grads can't learn on their own, or can't synthesize lots of different information, but I do
mean to suggest that CS departments are often places in which students learn and professors lecture, in a vacuum. But in this day and age, you can't spend four years in college and assume that once you get your piece of paper, a job will go along with it. You MUST keep up with new technologies. You MUST keep of with new technologies, which are variations on themes you learned in classes.
Suppose you take a series of general database-related courses, such as design, implementation, etc. More often than not, you will have been taught the finer points of a particular
database system -- maybe Microsoft SQL Server, maybe Oracle, etc. Contrary to what you may have been taught, there are others. If you did well in your database classes, spend a weekend installing another database or two; play around with Oracle if you learned MS SQL Server, and vice versa. Better yet, branch out into MySQL, IBM DB2, PostgreSQL. The point is that a general familiarity with a wide range of variations on a theme, combined with a solid academic background in database design and implementation, that will help set you apart from the hundreds of other new graduates. Same thing goes for programming languages; if you take a series of C++ courses, then you will have all of the foundation elements you need to pick up the basics of Java, JSP, PHP, Perl, etc. -- and that's a good thing.
While "familiarity" does not necessarily mean "experience", you can, in good faith, put these items on your resume. The ability to answer (correctly) a conceptual question, exemplifying knowledge of numerous applications and/or programming languages -- that's a valuable skill. One way to gain two or three years of experience with a variety of technologies, while still in college, is to take whatever part-time job or volunteer opportunity comes your way. Volunteering, while providing no immediate monetary reward, will give you an early start in filling out the "experience" portion of your resume. In the case of the user who asked the question on Slashdot, if he had started volunteering or immersing himself in new technologies while still in school, in then he wouldn't be where he is -- looking for an entry-level job, two years away from being where he "thinks" he should be, with his precious CS degree. Basically, a job search should start your sophomore year -- and this goes for several different majors -- when you apply for every internship and volunteer opportunity that you can get your hands on. Of course, I didn't do any of these things when I was in school, but that was a different time, and I was in a different field.
One other reason I'm thrilled to have my English degree, is that when I go through periods of time when I don't want to be a developer, I can go back to being a technical writer. The ability to communicate is very important, obviously, but the ability to document programming languages, software, procedures, etc. is a huge skill. I wish CS departments would stress this more in their curriculum, as they're shortchanging their graduates when they enter the workforce unable to document even fifty lines of code, let alone APIs. Plus, new CS graduates unable to find work as a programmer/database designer/sysadmin/etc. -- if they have the communication skills -- could enter a company as a technical writer and move over to the engineering group after making connections, impressing co-workers, and so forth.