Friday, April 16, 2010

Should I go into software development?

Should I go into software development?

TechRepulic

  • Date: April 14th, 2010
  • Author: Toni Bowers

This is a guest post by Justin James, host of TechRepublic’s Programming and Development blog.

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 inCommunications 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 next advantage you have is that you live near the Rochester Institute of Technology(RIT), which is a very good school to learn software engineering (not “how to program” but true “software engineering”). A friend of mine went to RIT, and I was very impressed by the education he received there. Even better, through that program, he was able to get some great internships, and he ended up at IBM, doing insanely cool stuff that I can’t even begin to understand. While the school you attend isn’t everything (you can get a decent education anywhere), going to a school with a good reputation that really gives you a solid fundamental education can be a game changer.

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.

These offshore shops have wised up, and their own people have developed the expertise to work with U.S. companies with less effort. In addition, many of these shops (particularly in India) hired people who moved to the United States and learned the language, customs, etc.; those people are now going back home to bring their expertise with working with U.S. companies to the companies there. As a result, the offshore companies are getting a lot better. Some people thought that the offshore shops lacked the creativity or hands-on experience in the industry to develop applications completely on their own; this is no longer the case, and many overseas firms have created great projects 100% in-house with no outside guidance.

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.
  • Many current development techniques are rooted in things that were necessary 20 or 50 years ago but are no longer needed.

Every industry expert and veteran programmer I have talked to agrees that this is where things are going, but it isn’t known when it will happen — it could be five years, or it could be fifty years. But I wouldn’t want to be caught by surprise by this trend.

Does this mean you shouldn’t go into programming?

Not at all! It means is that if you want to go into this field, you have to be smart about it. I do not recommend that you try to be a programmer; slapping programs together is an increasingly low-value proposition. I suggest that you look into being a true software engineer because these professionals are pretty rare and desperately needed. Big companies are hiring people from other countries on H-1B visas, while local talent is unemployed because schools overseas are generating the software engineers that the industry needs while U.S. schools are cranking out programmers. Shoot for the stars. Go to the best school that you possibly can.

Unless you are personally opposed to it, I highly recommend either enrolling in Reserve Officer Training Corps (ROTC) in college and going into the military or trying to attend a service academy. One of the biggest mistakes in my life was turning down an appointment to the Air Force Academy and a full scholarship through the Air Force ROTC. Even without the scholarship, going into the service would have been a great move, but I did not see it then. The military teaches incredibly important skills in many areas, and former servicemen and servicewomen often have a major advantage in the workforce (so long as they were honorably discharged).

In addition, I suggest that you start learning to program now. It will give you a leg up when you get to school; it will also allow you to find out if you hate the work before you are committed to anything. More importantly, you need to work development jobs and/or internships in college if you want to be employable when you graduate, and the more experience you get, the more likely it will be that you will land those jobs and internships. If you really want to be the best, you should start by reading Structure and Interpretation of Computer Programs (which MIT used to use to teach programming). This course will challenge you in a million ways, but when you complete it, you will know more about how to think about software development than most full-time programmers. The book is pretty tough to go through on your own (nearly everyone I know who read it on their own did so after they had some experience in the industry), but even taking an honest stab at it will do you some good.

To get experience, start with a few simple applications on your own or perhaps modify some existing open source code. Then start working on an open source project with other people, or volunteering your time to a non-profit to help them write software. 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!

J.Ja

No comments:

Post a Comment