By Sam Hennessy
So, you want to be a programmer. Well you need to get a computer science degree right? Maybe, but would you like to know about a free alternative?
Why not a computer science degree?
Some of the best programmers have a computer science degree and some of the best programmers don’t.
In all the times I’ve been involved with hiring programmers (which is countless), a degree was never a factor. The only time it is ever a factor is in choosing to give them a phone screen or not.
Does that sound crazy? It is a little crazy sounding; the fact that someone could spend 4 years and enough money to get a very nice car and all it gets you is a foot in the door. Here is an excerpt from Wikipedia:
“A Bachelor of Computer Science degree is normally required in order to work in Information technology industry”
http://en.wikipedia.org/wiki/Bachelor_of_Computer_Science
This statement is false. Of all the people I’ve meet in my career, I would guess that at least if not more that half the people that were working in IT do not have an IT related degree.
I have heard constantly the same complaint about people coming right out of college, “They have no idea how to program”. To add a little context, what this means is they don’t have the skills needed to be a professional programmer.
What is the alternative?
You still need that foot in the door. If you feel you could read a website or pickup a book and learn a skill, then I have a program for you. A program that will get you a full-time job faster and cheaper than a computer science degree, “The Open Source Degree”.
Free Software
If you have not heard of open source software, prepare to be amazed. There are very talented programmers out there that work for free. They write software without being paid and then give the results away for free. I’m giving you a very simple take on this topic but be reassured that you can become part of this movement and give yourself a great education at the same time.
How do you get started?
Find a project.
What excites you about programming as a job? Is there a specific company you would like to work for, say Google or IBM? Is there a specific industry, say gaming or social networking? Do you want to work at a startup or a fortune 500? Do you want to focus on Windows or OS X? Do you want to do websites or desktop applications? Do you want to work in the mobile space?
Once you have narrowed that down, it’s time to find a project in that area. Just do a web search for “open source” and the type of project you are looking for to get a list.
Don’t Start Your Own Project
If you have thoughts of starting your own project, I’m going to advise you against it. If the goal is to be a professional programmer, you need to learn how to work with other programmers as a team. A flaw that programmers can have who have never worked with other programmers can be that they have their own way of doing things and are resistant to change. When you work professionally, you need to work the way the company wants you to work. Sometimes programmers will give themselves bad names by coming into a company and fighting with the existing team over how they work. Give yourself a good name by being willing to work anyway you’re asked.
Is this a good fit?
Now that you have picked a potential project, you’ll need to find out what technologies they are using and start reading up on them. You need to find out how the members of the project communicate and get hooked in and start reading. Does the technology look cool and do people communicate openly and often? Then introduce yourself and say you want to program on the project. Be patient, sometimes people get busy and messages get missed, so if no one welcomes you right away, try again. Someone should then show you the ropes and tell you how to get started on things. Don’t skip this step; you need someone to be your mentor. If no one is willing, find another project.
By this point you should have a good feeling on whether or not this is going to be a good fit for you. Some projects consist of one person and some will have hundreds of programmers. You are going to get more value from working on a project with more than just a hand full of regular programmers, but even with a small project there can be value. Just remember, you want an education so you need people to give you feedback on your work.
Now for some good news and some bad news. The bad news is you don’t actually know enough to really be able to tell if your chosen project is a good fit. That’s okay; it’s all part of the education. The thought of “is this a good fit” will come up multiple times in your journey. The good news is no matter what you pick you are learning valuable programming skills. If you start out with a project and then switch to another, don’t worry it’s not time wasted.
What skills will I learn?
Working on open source projects are really not that far away from a real programming job. This is because open source programmers take their projects very seriously. They care very deeply about what they do and for the most part will have quite high standards. The following is some of the skills you can pick up.
Reading Code
I bet you think being a programmer is all about writing code, WRONG! It’s all about reading code, every now and then you get to edit code and sometimes you get to write new code. When you get a job more than likely you will be working on an already established code base. The first thing your new boss will have you do is work on a bug. This is also how most open source projects work.
Code has bugs for lots of reasons, but you are going to have to understand what is already there before you can correct it. When you get to do something fun like add a feature, you have even more reading to do. You will need to find where in the code base it will need to be added. You’ll then read the code of similar features to see how it needs to be added. You are then going to have to be sure you don’t break other parts of the system. So you will need to look at the code of all the parts that your new feature will interact with.
Don’t worry reading code is fun. It’s like organizing all the parts of a puzzle together. Once you’ve done that and putting the puzzle together goes smoothly, you feel like the master of the universe.
Getting a development environment setup
Almost all software projects require a little setup work and some require a lot. Like most things in software it will be a little different with each project. When you start a new job, sometimes the environment will be setup for you and sometimes it won’t. If you are in a situation where you have to get it setup and you have this skill, you will make a good impression on your new boss.
Following a coding standard
I bet if you saved all the time that was spent discussing if the curly brace goes on the same line or the next, we would save the world. Well I guess not, but still you would save a whole bunch of time. To avoid wasted time, most projects will have a code standard; this is something that says how you should format the code. Most software shops will have one too. So it’s best if you get used to the idea that you will not be able to write the code the way you want. When you get to your new job, don’t blame me if you get a pair of dead eyes looking back at you if you just ask why the curly brace is on the same line, I warned you.
Revision control
Most code is written in plain text files. There is an issue that exists when more than one programmer wants to make changes to the same file at the same time. To help manage all the issues this brings up, we have revision control.
Revision control is normally a software system that will track changes to the code. It will also help get your changes to the other programmers on your team and vice versa. It will help resolve editing conflicts and act as a sort of code backup.
These systems always seem simple at first, but then get very complicated very quickly. The only way to learn is by using them.
All modern open source projects use revision control. So you will get daily practice at using it and lots of help when you get stuck.
Taking criticism
Your work will be criticized, sometimes it’s friendly and positive and sometimes it’s mean and unhelpful. Most programmers love what they do and take great pride in their work. This is a good thing, but it means when someone makes a critique of their work they can take it as a personal attack. My work has been getting criticized for well over ten years now and even to this day I feel the sting when someone criticizes my work. Over the years, I have learned that it’s all part of the job and that I need to listen closely to what everyone says. In doing so, not only have my skills gotten better but I also come to understand other programmers better.
While working on your open source project, take every opportunity to get feedback from other programmers; view them as teachers. Think about what they are saying and if it seems correct, make the changes they suggest. Make it clear that you want feedback. Other programmers may be reluctant about offering feedback because they don’t want to hurt anyone’s feelings.
Independent research
The modern day programmer is expected to be a technology expert. With the staggeringly huge collection of technology out there, who can be an expert at everything? You are going to be expected to be able to become a trusted adviser on many technologies. When challenged with a question on a technology, don’t say,”I don’t know”, say, “Let me find the answer for you.”
With this programming education, you will not be given a list of textbooks to buy. You will need to find your own reading list. This is an important part of not just learning how to program but will also serve you once you are in a job.
You need to find two types of sources for each technology you will learn. The first is good foundational material. This could be in the form of books, online tutorials, video series or whatever suits your learning style best. The other is a good news source. The news source will keep you current on a technology and will lead you to other things you should learn. Each technology tends to have its own unique news source.
Ask the other members of your projects what they would suggest reading up on. Ask them where they get their news. While working on your project, if you see mention of technology or terms that you don’t understand, add them to a “must read” list.
Keeping current on technologies you know and being able to learn new technologies on your own will be a skill you will need and use your whole programming career.
Being self-motivated
To be a good programmer you need to be able to focus and work on a task without getting distracted. This is very hard to show to an employer in an interview
When working on your open source project, you will have no manager, you will have no deadline, there are no performance reviews and no one will be on your back. Well, one person will, and that’s you. You need to become your own taskmaster and work yourself hard.
When you talk to a potential employer and show them that you wrote lots of code without anyone else pushing you to do it, they are going to feel pretty good about you being self-motivated.
Ticketing systems
Most companies have some form of ticketing system. It’s just a central place that allows bugs to be reported and new features requested. The main goal of a ticketing system is to help keep track of the work that needs to be done.
Your open source projects should have a ticketing system also and because the programmers can’t just walk over and talk a co-worker a lot of communication happens in the ticketing system.
For a ticketing system to be effective people need to be disciplined in its use. Coming from the open source world you can show you have this discipline.
Workplace politics
Most all workplaces have some kind of politics going on. It can be as simple as two people have differing ideas on how to do something and pushing to get their way chosen. What ends up happening can be very subtle but you need to know what it will mean to you and your job. You need to learn how to spot it and how to come out of it with a positive result for you.
As you watch the communications on your open source project watch out for people disagreeing. Pay close attention to how they talk, some people will be clear and direct and some people will be a little sneaky. Get used to the idea that people have motives of their own and would like to see things done their way even if it’s not truly the best idea.
If you have been mindful and observant once you enter the workplace, hopefully you won’t get blindsided by the office politics and get entangled in something you will later regret.
Written skills
I need basic help
Computers are just very complicated calculators. So knowing math is much more important than written skill? I wouldn’t agree with that. You can have only basic math skills and it will not really hold you back. What will hold you back is having poor written skills. In the programming workplace you will be expected to write everyday. If you have poor written skills people will not give you the respect you deserve. You will also be passed over for tasks that require a written report.
If you need extra help, find someone to review your written work. This doesn’t have to be from your open source project, maybe there is someone you talk to on instant messaging regularly that can help. Have them review everything you are going to post or email.
Practice makes perfect and helps get you a job
You will need plenty of practice. Use your experience in learning your chosen open source project as the source material. Create a blog and write a post every week about your experiences. It doesn’t matter one bit if no one reads your blog. This is an exercise to keep your written skills sharp. It will also give a future employer something to read when they do a web search for your name. They will be able to see how good your written skill are.
Write for a well known blog or magazine
There are countless programming blogs and magazines. They are all hungry for content. If you can bag a big name blog or magazine it will look very good on your resume. The goal here is not to get paid but to help land a future job. When sending copies of your resume around include a PDF of the work you did.
Write a book
This is kind of a unique idea but you could write a book. Not a big one but something around 40 to 50 pages. You could pull from your experiences of working on the project. Send it to a few publishers (Developer.Press is great for this format) or self-publish it on Amazon. Amazon will let you do this for free. Then send out free copies to anyone who is willing to write a review of it for you, your buddies on your project would be good people to ask.
Also include a copy when you send out your resume. A potential boss would be very impressed to see a published book with reviews.
Spoken word
As a programmer, you will need to be able to clearly communicate very complicated ideas. You’re going to have to do this even before you have a job. You’ll have to do it in the interview for your job. In all parts of your interview, you’re going to be explaining very technical ideas. So before that day comes you need practice.
Even in this day and age of virtual friends and meetings, people still love to get together and talk. These people meet up in groups all over the world. Try to find a group that is specifically tailored to what you are doing. Even if you can only find a generic group, go and attend the meetings (meetup.com is a good place to start looking). Meetings are usually held once a month and they should be free to attend. Hopefully they will have someone giving an interesting talk, but even if you don’t care about the topic of the talk, you need to go.
Remember, your goal is not to learn from the talks, but to meet and talk to the members of the group. The great thing about the people that go to these groups is, most of them love to talk. Take the opportunity to ask lots of questions and learn all kinds of good stuff from the members.
Your next goal is to talk at the group. Find the organizer of the group and tell them that you really want to talk at the group one day. They can guide you in your goal by giving you advice on how best to go about it. Once you’ve given the talk, you can now add speaking at a local group to your resume.
Speak at a conference
You may never have heard of any, but programming and software technology conferences are big business. If you can land giving a talk at a conference that adds a big gold star to your resume.
If you want to go for it, you need to be always thinking about good ideas for talks. Every time you think of one, note it down. Then, keep an eye out for what are called “calls for papers.” This is when a conference is taking talk proposals. They will normally just want a summary of what the talk will be about. You don’t have to have a finished talk at this point. Submit as many ideas as you can. Be aware most conferences, if they are not local, will pay to fly you out and to put you up in a hotel, but not all do, so check before applying.
It’s very competitive; so don’t be disappointed if you don’t get accepted. If you do get accepted, practice your talk at your local group first.
Lots of other good stuff
You will learn lots of other good skills, these are just some of the ones I think are the most interesting to a potential employer.
Continuing your education
You are not going to get a well-rounded education by only working on one project. There is an amazing amount of choice in what to do when a project is started. That means the skills you are learning and the things you are seeing are only a small portion of the possibilities out there. At some point you need to go work on another project to get exposure to other technologies and ways of thinking. This may be hard, but it will make you a better programmer. You don’t have to abandon your old project completely but you should spend less and less time on it.
Should I go to college now?
Going the open source degree route will give you a very practical education in programming. One that is good for the majority of jobs out there. More than likely you will not be learning the foundation aspects of computer science. You will not be learning how hard drives work, or how CPUs work. You won’t learn about algorithms like quicksort or binary search. There are programming career paths you may want to take that really require you have a college style education.
There is very big difference between the two. An open source degree will cost you nothing but your time and dilligence and a college degree will put you in a good amount of debt if you can’t pay for it as you go.
My advice is start with the open source degree; give it a solid six months. You will know for sure then if you are going to need a college degree.
How long will this take?
It will take you as long as you need to get a job.
The goal of this degree is to help you get a job. As an example, you could spend six months working on projects and following the degree program. In this time keep an eye on the job market you are interested in. After the six months, start to put a resume together. Include all of the things you have been doing. Now ask the people in your project and your local meet up group to take a look at your resume. These people have been in your position and they have more than likely reviewed resumes and interviewed people for jobs. Have them review your resume and listen to their feedback. They may even know people who are hiring.
While looking for a job keep working on the open source degree. The more you can add to your resume, the better your chances are of getting a job.
Conclusion
Calling this program the open source degree obviously is a little tongue-in-cheek. What I hope you have seen is that a college degree doesn’t make you a programmer. You need to make yourself a programmer. The open source degree is a guide to help you focus your efforts as it pertains to getting a professional programming position, all while contributing something positive to the world.
If someone was to come and interview with me and they had done most of the above things, I would chose them hands-down, over a recent college graduate and I would be excited to do so.
Do you agree or not? Let me know what you think. Please include where you are currently in your career path.
Sam Hennessy is a PHP software architect, speaker, trainer and author and has worked professionally with PHP since 2000. Sam worked for Zend Technologies as a Profesional Services Consultant working with companies large and small including Fortune 500′s. He lives in the Boulder, CO, USA area and is originally from the UK. His latest book, PHP Array Filtering, is available at DeveloperPress