Tuesday, April 9, 2013

Do I Need a Degree to Write Software?

Many people over the years have asked me if they need a degree in Computer Science to get a programming job. Technically a degree is in not required to be a programmer. However, I believe that the degree program that I completed was invaluable to my career.

Most all jobs I have applied for consider 5 years experience in the field as equivalent to a degree. I once thought that only programmers with degrees really have a well rounded background in in the fundamentals. But despite my belief in the core curriculum as minimum of skills required to be a good programmer, I have known good developers with no degree that knew all the fundamentals. I also have seen developers with excellent degrees that did not know the first thing about coding.

The real asset that you get from completing a degree in Computer Science is from the actual knowledge you acquire and the guidance you get from experienced professionals that have studied the subject at length. If you just learned how to dupe the professors and you never truly learned what they were teaching than it will most likely be found out in the interview process.

I could care less about the degree you have when I am involved in hiring developers. Would I care about is what you know. If you managed to get to the interview and you don't have a degree than it means I don't care. What I do care about is that you have the ability to write good code and you  have an understanding of everything from Computer Architecture to Software Engineering. You don't need to go to school to do that but it may help to have a structured learning environment.

There are some places that will not consider non-degree developers. I find that very rare in the industry. Once you have the experience, most places will not look at the degree or lack thereof. Having said that, not having a degree could limit your options and may mean that someone else with the same qualifications and experience gets the job and you don't.

If you do decide that school is just not for you than set yourself on a path to being a competent Software Professional by making your own learning plan.  Because you don't have to worry about classes that are not directly related to your profession you can focus all of your energy on Computer Science Subjects. The following is a minimum for a programmer to know:
  • Learn Assembly - Some developers sware that learning assembly first is the best way to be a good developer.  This is because all other languages just translate into binary and assembly is just a human readable form of binary.
  • Programming 101 - Pick up a bug on beginning programming in C#, VB.NET, Java or whatever language you want to use. I would suggest a strong type language for your first Language.
  • Object Oriented Programming - OO is everywhere right now and even if you don't like it you will need to at least understand it. I don't like how OO is mixed in to basic programming classes. A good book to start learning OO is The Object Oriented Thought Process.
  • Advanced Programming - Once you think you have mastered basic programming then move on to a more advanced book on the same language. Go past just basic for loops and variable assignments.
  • Data Structures - You need to implement your own data structures in order to write real world applications. Chances are that you will not actually write these data structures but you will use 3rd party implementations of hash tables, linked lists, stacks and tree structures etc. You don't want to learn this on the fly and it should be mastered before attempting more advanced programming subjects.
  • Computer Architecture - Learning what the underlying workings of a computer can help when programming. You don't need to be an electrical engineer but a basic knowledge of and gates, boolean logic, assembly language etc will help you down the road.
  • Client Server Architecture - Learn the ins and outs of how the web works. Even if you don't want to be a web developer, everything is online now days. You need to know how to call web services and hook into online api. Understand how TCPIP works and know "How the Web Works".
  • Object Oriented Design - Get a good book on pure object oriented design and become best friends with it. Take it to lunch and hang out with it when you get off of work. The reason is you will be using it everywhere in software. You can program with only a shallow understanding of OO but a deep knowledge will let you use 3rd party tools and api's to there max potential.
  • Traditional Software Engineering - Pick up an older book on software engineering and spend a good amount of time mastering the subject. Looking on the internet is probably not going to help here. Structured Design is a must read in my opinion. The software industry is really split three ways between companies who use no methodology, ones who use traditional approaches, and ones who use Agile processes.
  • Agile Development - Agile development is used heavily. Knowing what you are talking about in this area is important. Agile and traditional techniques but heads. Even if you think agile is the only way to do things its best to have a full understanding of the traditional techniques. This is because Agile is really takes a-lot from the lessons of traditional engineering.
  • Project Management - Even though you are a programmer and may never manage a project you need to know how software should be managed. Software Project Management is radically different from traditional Management. There is a range of techniques so don't just take one as law. The Mythical Man Month is an absolute must in my opinion. Also read books on agile project management.
  • Database Management - Although its helpful to learn SQL statements you need an academic book on the fundamental design of databases. This should teach you how to spot a bad database and how to fix it. It will help you make decisions on how to write your own tables etc. This is good as a last course because engineering plays into this.
  • User Experience - There are many books written on ui design and user experience. I would suggest reading several of them. In addition there are standards written by Microsoft and other large companies. Take advantage of millions of dollars worth of research and read what they have to say. There is nothing worse than a bad user interface to a software package. Even if you don't make user screens this can help you write better software.
  • Learn a core API/SDK - While you are trying to master other subjects make sure to learn a core industry api for what you want to develop. For me this is a user interface api such as winforms/ASP.NET or WPF. However, you may not be writing user interfaces maybe this means a graphical api like GTK or DirectX. Perhaps it means diving deeper into low level driver programming or mastering an SQL variant.
Mastering a subject takes more effort than just casual reading. Don't just read a book but study it. This means reading the same chapter over and over. Quizzing yourself on the subject. Learning does not take place within a short period of time. Read a book all the way and then spend a set amount of time really mastering what it says. Programming is learned by doing and not by reading. If the book has practice exams and exercises do them all. I can guarantee that the real world will have harder tests than the ones in your book.

While you are trying to master the art of programming you should be looking for an entry level position. If you can't find one than start your own open source project or even a project for money on your own. Even if you fail or get fired don't give up. I wrote my first program when I was 15 before I went to school. It is that experience that has helped me to get into the profession.

You should be looking to fulfill that 5 years of experience. Pay is not that important when you first start out. Experience matters, if you can get yourself in the door with a company than hold on until you feel you can get hired elsewhere.

related blogs:
do you need a degree for game dev


  1. I would imagine that pay would be better if you had a degree. It still seems like the pay is more based on talent. I've seen some software developers that are amazingly talented, but they don't have a degree. However, a degree in software development will help you get placement in a job.

    Gerald Vonberger | http://www.coleman.edu/lp/software-developer-degree-in-san-diego.php

    1. Whats frustrating employers is that the candidates with degrees don't seem to know basic programming. I have worked with developers that had a degree from a good school but could not program to save their lives. I have also worked with developers with only a high school diploma that were excellent programmers. I think the biggest thing a degree will get you is your foot in the door.

  2. The real asset that you get from completing a degree in Computer Science is from the actual knowledge you acquire and the guidance you get from experienced professionals that have studied the subject at length. If you just learned how to dupe the professors and you never truly learned what they were teaching than it will most likely be found out in the interview process.
    thanks for sharing it..Dissertation writing service

  3. Very interesting article. I have a contact with a lot of software developers, who do not have a degree and with ones that have. From my point of view, what is most important are the skills you have, not the 'paper'.