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


26 comments:

  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

    ReplyDelete
    Replies
    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.

      Delete
  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

    ReplyDelete
  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'.

    ReplyDelete
  4. This is very informative. Writing a software doesn’t necessarily require a degree. You can also get software programming training from some institute to gain knowledge and do development. That’s why even I got myself enrolled in some most advanced programming courses in Dubai to get a good job in the IT companies in Dubai.

    ReplyDelete
  5. The most in demand online social network site Twitter helps people to realize about ongoing issues and activities or social reactions of their favored superstars. permanent twitter followers

    ReplyDelete
  6. You might additionally require these U.S.A Facebook Suches as for gaining competitions that are held online. buy usa likes

    ReplyDelete
  7. Are you presently trying to find valid genuine YouTube Views? Leave behind your headaches, we can completely assist you to buy YouTube Views. buy monetizable youtbe subscribers

    ReplyDelete
  8. SB movers and packers provide Best Movers in Dubai and on time Relocation in Dubai services with professional 6 years moving Experience. We are best Removals in UAE with Local moving services Throughout UAE. SB Movers are among the Best Moving Companies in Dubai with quick and fast service. We also offer the reliable House Movers in Dubai. For More details you can check our website http://www.sbmoversuae.com

    ReplyDelete
  9. Thanks Great Post. We are professional, delivering moving and packing services, relocation, removal, and storage solutions at highly competitive market prices in Dubai-UAE.
    Local Movers in Dubai
    Cheap Movers in Dubai
    Movers and Packers in Dubai
    Villa Movers in Dubai
    Dubai Movers
    Best Movers and Packers inDubai
    Best Moving Companies in Dubai

    ReplyDelete
  10. A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
    website: geeksforgeeks.org

    ReplyDelete
  11. I am read your blog properly and I am got of many information, I am suggest to you keep share like this type of blog, it’s really helped me a lot of keep working, am suggest to my all dear friend to visit this blog and collect lot of information, thank you so much for read my comment, if any one searching website designing or development company in India please visit my website we are completed your work in cheap rate.
    Website Designing Company in India

    ReplyDelete
  12. A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
    website: geeksforgeeks.org

    ReplyDelete
  13. It is great that you share with us such information, for me such things are very helpful.

    Website Designing Company In India | Best SEO Services In India

    ReplyDelete
  14. I really read your information you will mention on blog it’s provided us with helpful information for me, thank you so much.
    Transformer Manufacturers In Pune | Transformer Manufacturers In Mumbai | Transformer Manufacturers In India

    ReplyDelete
  15. No it's not that important for us to write a software. the only thing that we need is deep knowledge of programming.
    Hostgator Managed WordPress hosting

    ReplyDelete
  16. it's guidance for people, I respected you.
    http://www.hostingdomaincoupons.com/

    ReplyDelete
  17. I totally agree with all the information provided in the blog. We are Digital Marketing Agency offering PPC Services in Dubai. Helping people to optimize there website and increase there online sales.

    ReplyDelete
  18. I feel happy about and learning more about this topic. keep sharing your information regularly for my future reference. This content creates new hope and inspiration within me. Thanks for sharing an article like this. the information which you have provided is better than another blog.
    IELTS Coaching in Delhi

    ReplyDelete
  19. Usually I never comment on blogs but your article is so convincing that I never stop myself to say something about it. You’re doing a great job Man,Keep it up.
    study abroad consultants in delhi
    ielts coaching in gurgaon

    ReplyDelete