A little while back I was introduced to a site called Career Dean. It is a site primarily geared towards college students (and some upcoming high school graduates) working towards careers in the programming / development field. People can ask questions and others with experience in the industry provide answers, which can then be “upvoted” in your typical fashion. I spent about a week on the site sharing what I know where I could and hopefully providing some inspiration to other budding developers. However, I noticed a slightly disturbing trend amongst a lot the questions. Here is a sample of some of them:
- Is the compensation on a person’s first job of significant importance?
- Bored to tears after a month as a Software Engineer. Is it too soon to leave?
- What is the best paying programming language to learn?
As I looked over and responded to these types of questions, I realized that a lot of college students seem to be making a big mistake with their college career. If you’ll allow me, I’d like to provide some “free advice” [though nobody really wants it as my grandfather would say] on the issue. I believe students are focusing on the syntax of their profession when they should be focusing on the semantics. Or to state it differently, they’re looking at their first job when they should be looking at their career.
I completely understand where this focus comes from. We work in an industry that changes day by day. It’s been nearly 20 years ago now that I sat in a “prospective student orientation” lecture at the computer science department at a university and asked “What language should I learn?” I didn’t want to learn some defunct language and be stuck without a job. The professor answered, “It’s hard to pinpoint a specific language because things are changing all the time. Learn your core programming concepts first and the languages will come.”
What sage words these were. When I started my college education, the web was just barely coming online. There was no such thing as Ruby on Rails. Python existed, but it wasn’t a focus of web programming use. Perl was the CGI processing language of choice. With due respect, I never really liked ColdFusion either. Mobile development as we know it now was still science fiction. .Net wasn’t announced formally until my senior year in college. Sticking with the “language du jour” may get you that first job, but you never know what is going to happen down the road. I suspect there are still plenty of jobs for Perl programmers, just like Cobol, but there is so much more out there now. My career has gone from Perl, to Flash ActionScript, to .Net, to PHP, and back to .Net again so far. That doesn’t count some of the Ruby on Rails, Python, and Java I had to work on along the way. I’m sure it will change a few more times before I retire as well.
Instead of a particular language or field, focus on the things that will be applied universally in your career:
Focus on algorithms and design patterns, because no matter what language you use, you’ll always need to identify the best model for structuring your data, and the best algorithm for sorting it or iterating through it. I barely knew much PHP when I was writing my first integration script from an Oracle database into a flat file for a third party import, but I did know that doing one massive join query across multiple tables isn’t always as fast as grabbing your core data in one query and then filling in the little bits before continuing.
Focus on learning to debug well. Tools are always changing, but learn the “art” of setting up diagnostic breakpoints, how to monitor certain events or data exchanges. Learn the good ‘ol fashioned “printline debugging” since sometimes that’s all you have. Learn how to evaluate the code before it even runs to identify potential “trouble spots” in the code to prevent a long and slow debug process. In one particular scenario, I didn’t know the exact details of how HTML forms submission processing works at the packet level, but I knew enough about the API I was working with and how to “sniff” my network traffic to finally figure out that the API was missing an important field break when it attempted to upload files of a certain type.
There are a lot more of these “semantic” concepts I could go over, but there was one other question that struck me as well:
I couldn’t be more adamant when I say GO TO SCHOOL! Yes, I put caps on that one! There are things you will learn in college (and yourself) that are invaluable and you often won't find just being out there in the world. I was in a 3/2 program that allowed me to focus on liberal arts and the “great books” and there were critical thinking skills that I received through that that you wouldn’t get elsewhere. In addition, there is the camaraderie and friendships that you can build within the college environment that can be hard to acquire when everybody is busy all day with jobs and available for a little bit at night or the weekend. One other important thing to remember is…
You are NOT your career.
[Yes, there is a pause here, for both of us. I’m re-reading this and reminding myself of this important point as well. Let it sink in for a moment.]
“All work and no play makes a student a lousy conversationalist” is a wise saying an old professor gave me. It’s easy to get caught up in the excitement of startups, big projects, and all the work involved with this. But when the weekend comes, there’s nothing to do, so you work more. Or maybe you’re so far caught into bits and bytes that you don’t know about the amazing art exhibit that opened up a block away from your place. As much as I’d love to live in the matrix and make it do my bidding, I’ve found that more often than not the most satisfying times have been sitting on the deck with my wife reading with a glass of wine and a good sunset. Or feeling the bite of cold air go through my nose and into my chest on a morning run. Or the intense bonding moments you have while playing imagination with your kids. Or sitting out on a summer day at a friend’s house and catching up on the things of life with a cold drink.
PLEASE don’t make your work your life. I’m a big proponent of having a side project or two for nights and weekends, but not at the expense of my family and friends, or even me! Take the time to seek that balance. You’ll be surprised at how a weekend hike with some friends can oddly bring some fresh insights, innovations, and even energy when you get back to the office the following day.
So there’s a little free advice, for what it’s worth. I’m not a startup guru, or inventor of a language, or even a speaker at any events, but I’ve put in my 10K hours and picked up a few things that I would have helped me avoid a few hurdles early on. I try to “share the love” when I can and I hope this gives you some guidance or insights as you move forward.