Master Malstrom,I’ve been programming computers since I was six and was making too much money in the software industry at the age of twelve at least compared to what other twelve years old children were making, assuming they had any employment. I have worked in almost all of the disciplines at one time or another functioning in rolls of development, quality, release and management. I’m stating this not to show off or anything, but in the event you add this information to the public forum of your blog to help give my perspective of what I am adding to your conversation.It is understandable for anyone outside of the software industry to not understand what is going on inside of it. At a fundamental level I believe most people should be able to comprehend at least the basic concepts of building a house, mining for precious minerals or drilling for oil. There is a lot of math and science involved in these fields that will only be understood by members of those communities that the average person will not understand. It is my belief that they are for all intents and purposes well understood and typically regulated. I don’t want to insinuate that things go according to plan all of the time or that nobody is doing it wrong, only to postulate that the bulk of these business exercises are well understood, carry measurable risk and anyone in those fields that know what they are doing at a certain pay grade is making decisions that impact not only the bottom line but also the health and safety of employees and potentially members of the community.
While it is certainly possible for a person to start digging underground looking for precious minerals or oil under there property there are several things that are likely to stop this individual from getting started. First, digging underground is just not a natural exercise for most humans. The average person has no understanding of tunnels, support structures necessary for underground or the sheer effort involved to take on this level of work. The amount of material underneath our feet is measurable, but the vast amount of it essentially has no value to the average person and they also have no idea how to locate the precious materials.
Construction on the other hand is certainly something a lot of people participate in. It’s relatively easy to hammer some 2×4’s together and construct a shed, dog house or something else. In most areas building a small structure isn’t regulated because the health and safety issues are minimal. It’s pretty hard to build a home or garage without anybody noticing and you’ll quickly have inspectors coming by, zoning board hearings and all sorts of other headaches.
At a high level these activities have fundamental hurdles necessary to pass in order to undertake the tasks on any scale and to extract any value. There is a reason they are regulated, expensive and difficult jobs.
The barrier for writing software on the other hand is at an all time low and every few months it gets easier to enter. As a society it is almost a necessity to have a phone and these days anybody can write programs on there phone if they are so inclined. If you don’t have access to a phone you still have the option of going to internet cafe’s, the library or any other place that will grant you free public access to computing resources. It is a trivial exercise to both get access to a computer and to access information about how to program it.
The exciting and depressing thing about software development is that while there are disciplines for it, there isn’t really a playbook that anybody follows. When you start writing a program unless you have the inclination to write a design document you can start piecing things together anywhere. Imagine if during construction of a garage your contractor decided to build the roof first and then realized that he forgot to pour a foundation. You’d probably think this person was crazy and would definitely fire the contractor on the spot and then sue this person. In software this happens all of the time. It requires a massive amount of effort to tear everything down and start from scratch only to find out that yes you got the foundation in place this time but you didn’t put any doors in place.
To give you another example of the types of issues that software hits, let’s use the BP oil spill as an example. At the end of the day there was a business decision to drill and somebody signed off on the risks involved. Although it’s possible that information was missing or even something incalculable went wrong that couldn’t have been factored in, it was still at the end of the day a business decision to go forward. Security issues in software are comparable to oil spills except that where you can mathematically calculate risks for an oil spill and cover them in your bottom line, security issues in software are definitely out there and nobody is taking them into consideration. Security issues are almost always hidden and they will get exposed at some point causing untold damage to the customers, employees and company.
Developing new software these days is almost like mining except there is no formula to figure out when you’ve struck gold. Every new software development is just a chance to strike gold. There are even countless cases of software striking gold only to be quickly run into the ground due to mismanagement of the business. How many times do you have to develop something new to strike gold though? It is mind boggling to consider just how much energy is invested into software only to result in such a broad amount of failure.
Given all of these issues, people still go off to write their own software. Heck you don’t even need a degree in Computer Science or Software Engineering to get started. You just need a computer and the interest to tinker with it.
A last issue with software I’d like to point out is that most people think that developing software is 90% of the problem. Once you’ve got a finished product you’re maybe 10% of the way done. There is so much testing, marketing, releasing, management and all of the other things that make up a successful product that people often miss out on. I’ll be honest, none of this is magical but many people think it is. Personally I feel it is important for Computer Science majors to study other fields because often what is applicable to another field really is applicable to Computer Science.
That was probably too much preamble, but I think I can help illustrate why Computer Scientists regret there decision to get their degree.
1) A Computer Science major is competing in the job market for a job where the degree might not matter as much as experience. Anybody can and will start writing code. While the degree hopefully imparts a level of maturity in documentation and design most Computer Science majors will still balk at doing this work when required. To some degree what is the point? If everybody else is writing garbage code why should they be held to a higher standard?
2) A Computer Science major is competing in the job market for a job where often the location does not or should not matter. Companies are often more than happy to hand off work to China, India, Brazil or any other country for two reasons. The first reason is fairly self evident which is cost because often the cost of a developer in a country outside of the US/EU is cheaper. The second reason is much less known but makes sense, a business will hire individuals in another country to get government contracts which stipulate a minimum number of employees within their country.
3) A Computer Science major will want to get the cool jobs. Developing new software is seen as cool but the vast majority of the work is actually maintaining or fixing somebody else’s broken down garbage code. The same person who wrote the garbage software in the first place is already out developing new code without a design. Given the current state of things the average Computer Science major will never be out of the maintenance flow, and by the time they are in a position to actually make a difference they’ve probably picked up so many bad habits that they are arguably no better than the person they wish to replace.
4) A Computer Science major who actually gets to work on the front line and do something cool is often going to be working at a start up. This often entails 60+ hour work weeks but for a salaried pay. In this situation they will literally be making 50-100% less money because they will never get paid overtime, and the chances of the company striking gold are so low that at best they can add their work experience to their resume and move on.
Now that we’ve rained on the parade, I’d like to give some advice.
1) While software development is technically global, it is often in your best interest to be willing to relocate to where the work is. Any hiring manager will be far more interested in a candidate that they can walk over to and say “we have a problem”. Don’t preemptively move, but if you are able to move even remotely close it really is a good thing for you and the business.
2) Find ways to differentiate yourself from the other employees. There is a mountain of open source projects out there and it is very easy to get involved in many of the communities. Yes you’ll be giving up your time for free but this will give your potential employer a view into how you interact with other people in a public forum, they will be able to see what level of coding skills you exhibit and they will have the ability to talk more directly about your experiences.
3) Stay relevant. All those classes in school were great, but you need to keep up with the cutting edge technology. College can be far too academic for it’s own good sometimes, so remember those ivory tower lessons might be the goal but you’ll still have to live in reality as you try and help people get there.
4) You cannot fix everything. Yes it’s possible to go off and rewrite all that junk code, but there is too much of it and you’ll never ever catch up. Focus on the real problems that are in your way and that will allow you to make slow, consistent and steady progress.
5) Study task management and learn how to prioritize work. Often in software development, management will think a lot of effort is free. This is not the case, you’ll need to learn how to manage your time and work with others to make sure you take things off your plate as new work comes in. Or you can learn to enjoy those 60+ hour work weeks.
6) Fresh out of college don’t be looking to make a name for yourself. Definitely track your progress so that during review time you can specify exactly what you did to meet your goals and objectives. Keep an eye on how you can self promote at this time regarding how you impacted the bottom line.
7) Take advantage of any corporate training, college training reimbursements and such. This will make you more valuable to your current employer and any future employers.
8) Your first job is likely to bend you over the barrel financially. Seriously just get the first year or two of employment out of the way. Experience often trumps all and having a degree is still important.
9) Know what your worth. Check websites like glass door and others to find out what you ought to be making. If they are not going to give you what you want monetarily try and negotiate for additional vacation days, hiring bonus, stocks or anything else you can get.
10) Don’t be afraid to start a business and contract yourself out. Sure you can go through a contracting agency, but they’ll be skimming off the top. Having your own business will also give you valuable experience in operating portions of a business and if it happens to take off you can bring other people in to work with you.