A few months ago, I met someone through a mutual friend who wanted my opinion about whether he should study Computer Science in college with the goal of becoming a software developer. This is my response to him.
I’ve got good news and bad news. The good news is, other than the lack of experience in the field, you are in a great position in terms of timing and geography (note: he is a high school senior who lives near Rochester, NY). The bad news is the software development field has started to undergo some very serious shifts in terms of how things are done, which could potentially make it a fairly unattractive field. Let’s start with the good.
The good news
First off, your lack of experience in the development field has allowed you to not have any prejudices about it, and unlike a lot of aspiring developers I talk to, you aren’t filled with delusions or fantasies about what it would be like to work as a developer. Too many folks go to school thinking that they are going to graduate and be working on, say, World of Warcraft. Yes, it is possible to go straight from school to the gaming industry, but you have to break your back in school to do so, and preferably go to a school with a specialized gaming program. I recently read an article in Communications of the ACM about these gaming programs, and what those students are doing is not easy. Very few students make it to those schools and those programs, and people who have that kind of goal without the necessary motivation and talent will be sadly disappointed.
The bad news
More and more software development work is sent to India, Russia, China, Israel, Romania, and Ireland; these countries have excellent educational systems, much cheaper labor, and laws that do not give employees much power. A few years ago this was annoying but not horrible because the work shipped overseas was generally low value programming. A lot of these offshoring arrangements failed due to language barriers, time zone differences, cultural barriers, and other factors that basically act as “friction” in the process.
In other words, after you would graduate college, you would be competing not just with the other recent graduates in your area but with graduates around the world. Think of this as a challenge; someone else is willing and able to do the work for less money, so you have to be willing and able to do the work better.
Another factor is the changing nature of software development. In the last few decades, and especially in the last five years or so, we’ve seen a raft of products introduced that make programming more of a “gluing parts together” than ever thought possible. This doesn’t mean that, in the future, there won’t be programmers, but it does mean that there will be a pretty deep split between the people doing the “gluing” (who will be about equal to a factory worker from the early 1900s) and the people designing the glue and the parts. This trend will continue, and it must continue, for these reasons:
Software development projects are very expensive, especially in relation to how much money they save in too many cases.
Making changes to existing software is much harder than making it to begin with, and it is extremely difficult if the person making the changes isn’t who wrote the original (or if it has been a while since that developer touched the code).
Software patterns are very well established in many cases, and there is little reason to keep re-writing the same code.
To get experience, start with a few simple applications on your own or perhaps modify some existing open source code. This will provide you with hands-on experience, as well as something to put on your resume.
The key is that you must differentiate yourself. If you graduate school and you spent that time flipping burgers and getting Bs and Cs in Computer Science, guess what? There are thousands of students across the country who just graduated in that situation and thousands more overseas, all of whom are hungry for work. But if you graduate from school with two years of quality internships or part-time employment, with a background in real software engineering (especially if you took a specialized course like those video game programs discussed in the ACM article), then you should stand out and have no problem starting a rewarding career.
I hope this helps!
No comments:
Post a Comment