The other day I joined in on a short conversation between an intern and a full time developer. They were discussing what a university student should learn in addition to what’s taught in the classroom. They weren’t talking about make-up work for an out-of-date curriculum. (Which unfortunately is so common) But truly how to go from good to great.
Here are some of the ideas that came out in that conversation and what I thought of later. If you have any other suggestions please feel free to add your comments below.
1) Master SQL. Data is the core of nearly every system. While the database schema may be generic, the data in the schema is the least generic piece of the system. All the quirks and undocumented requirements of the business will quickly find their (often ugly) way into the data. Strong DB skills are essential to create and maintain effective and efficient systems. Bosses are always on the lookout to pick up job candidates with stronger than average database skills.
2) Learn a DB language. T-SQL and PL/SQL are easy to learn and extremely valuable in the workplace. Very few students graduate with DB language skills. The few that do have a massive advantage in the job market.
3) Watch out for teaching languages. Explicit teaching languages like Pascal are a thing of the past, but languages that are taught a lot (C++ and Java for example) carry a lot of baggage. First, everyone knows them. Each job opening in that language will have dozens of candidates—many with prior experience. Second, the language is usually not growing quickly so the opportunities for advancement are limited. You should master the teaching language—but don’t bet your economic future on it. Instead, learn a non-teaching language. Find a language that interests you and has a growing job market. Master that language.
4) Get an internship that uses your non-teaching language of choice. If that falls through—get a different internship. Practical experience in the “real world” simply can’t be matched in the classroom.
5) Do a bootstrapped startup. Build a software product and sell it. But whatever you do, don’t spend a dollar on it that the business hasn’t already earned. The point of a startup is experience—hiring someone else to do the dirty work will give them both the experience and your money. Don’t waste it. Grow slowly and leverage momentum. Become the world’s expert in the product you are developing and selling. You’ll either succeed or have a very impressive resume or both.
6) Be balanced. Writing code is not everything. I am not referring to beer bashes–the party life will do little more than lower your grades. (One imballance is never corrected by another.) I mean seriously engage in life outside of computing. Volunteer, attend church, sing in a choir and play in intramural sports. The great secret of technology is that writing great software is only half about technology. The other half is about people. Great systems can only come into being when the people who write them understand people, their needs, their dreams and their desires. Software must be shaped to be human.
Far too many lines of beautiful code are written that no one will ever use because they don’t do anything useful for anyone. It is such a shame. Great software can only be written when the walls of isolation between IT and non-IT are broken down.
I was fortunate to attend a small Christian school that not only has a top notch CS program, but also a great liberal arts curriculum. Rubbing shoulders with English, PE, Nursing, Religion and Psychology majors on a daily basis enriched and widened my life in a way nothing else could.
…
There was the supper at the cafeteria where a psychology major friend of mine played a small (non-embarrassing—thankfully!) psychology experiment on me. Then explained the experiment and its’ meaning.
There was the athletic friend who twice tried to teach me how to hit a golf ball (and failed miserably)
And on and on
…
Learning to understand (and appreciate) the different skills and ways of thinking of the “non-technical” world has paid off over and over in the years since.
October 5, 2007 at 12:05 am |
Nice post mate. I agree entirely with the “database skills” part. That feeling became yet more enforced after watching the youTube Scalability Google Techtalk. Useful post for someone just graduating from college.
October 5, 2007 at 1:40 am |
> “Watch out for teaching languages.”
Most universities teach classes in all kinds of languages. What you call “teaching languages” are simply languages that implement fundamental programming concepts in very clean ways: Eiffel, Pascal, Oberon, Prolog and so on are great for learning concepts. And guess what, you go to Unversity to learn concepts, not programming languages.
If you’ve studied Computer Science and learned to program in Eiffel, learning Java is a two-day job. You already know all the concepts, you’ve just got to become familiar with the syntax and with where to find information about the libraries. Of course, becoming proficient in a language is another matter; proficiency equals knowledge of libraries, and the Java libraries are a huge mess; you’re only going to learn that on a real job, anyway.
If your University has no classes that are thaught in C or Java or C# or C++ or Perl or Ruby (and really, most do at least have classes in C and Java), you can and should learn them on your own. But don’t put too much weight on doing so. If you studied computer science and apply for a job that requires knowledge of a particular language, the employer has no clue and you probably don’t want to work for him anyways.
December 11, 2007 at 2:29 pm |
Well, I don’t know about “top notch”, although I would probably agree with “decent” or “good”…but then maybe I just had high expectations. And interestingly enough, my difference of opinion with you on this point is precisely because I did what this post recommends and got most of my knowledge/experience/abilities outside the classroom.