In The Natural Move from Philosophy to Programming and Moving from Philosophy to Programming: Additional Reasons, I argued that philosophers who are looking to leave academia might look to programming as a natural alternative. If you are a philosopher, the point was to convince you that there is a viable alternative that you will find intellectually satisfying and which you can be excellent at given your skill set. If you are an employer, you should have been able to see that potential job candidates with a philosophical background rather than, say, a computer science background, are nevertheless potentially beneficial to your company and can succeed as programmers. In this post, I am going to say how you can get started in learning how to be a programmer, and how you can break into the field. Although this post is directed specifically to philosophers, much of it will be applicable to non-philosophical academics who are interested in making the transition.
There is one important caveat before I get started. There are plenty of articles online about how to become a programmer. The articles conflict with each other. You should expect that what I say here will be contradicted by what someone else says. It is important for you to read around and take what any individual says as a representation of his or her own particular experience. Probably, there is no single best way to get into the field. (By comparison: there is no single best way to ask someone out on a date. There are lots of ways to do it, some ways are better than others. Although it would help to listen to someone who has something relevant to say about the topic or about that special person, at some point you have to just go for the path that seems likely to work for you.)
Starting From the Very Beginning
Assuming that you know nothing more about programming than what I said in the articles referenced above, you will need some help narrowing down where to begin. First, programming is not the same thing as information technology (IT). As a programmer, you will have to eventually know some stuff about IT, and IT people eventually have to know some stuff about programming, but a programmer’s job is not the same thing as someone working in IT. IT is more focused on working with servers, setting up firewalls, providing security certificates, setting up routers and networks, making sure databases are secure and properly maintained, etc. There is overlap, but IT is distinct from programming. To get started on becoming a programmer, you will probably want to know something about basic computer science 101 stuff and then pick a language to start learning.
Computer Science 101
Programming and especially books and articles about programming involve a lot of jargon. A lot of jargon. The jargon can be about computer architecture. For instance, when we declare a string variable or any other reference type, is that memory stored on the stack or on the heap? What’s the difference? Some of the jargon is about networking stuff: in order to see whether the postback sends the correct data, open a fiddler and check what’s being sent in the packets. Jargon! It is a good idea to have a basic understanding about computers. Where might you begin, then?
First, there are free online courses provided by places like Stanford and MIT. Personally, I have found this method of learning only modestly helpful (although I have not worked through these particular courses). The assignments might be emailed to students, and you might not be a student. You might not have a TA reviewing your work. A student might ask a question in a video that you cannot hear. How useful are these sorts of courses? Your mileage may vary.
Second, you can register for a 101 course where you actually receive credits. I enrolled in an online course for CS 101 at a nearby community college. This involved purchasing a book, doing weekly homework, watching some videos on YouTube. I was able to accomplish all of the reading for the week in about two hours and all of the homework in an additional hour or two. It probably helped that I was also taking a Java course simultaneously and so there was sometimes overlapping content. Looking back, I probably would not recommend this option unless you plan on obtaining a degree. (I will address the need for a degree later.) The reason that I would not recommend it is that if you have a graduate degree, you will be able to plow through the assignments very quickly and likely can find answers to all of your questions online.
Third, you can find an excellent book on Amazon.com. Basically, you will want to find any book that might be used in a CS 101 course, such as this. The point of this is to familiarize yourself with what is out there and what you might encounter on the job; it is not going to give you information about what you will necessarily have to know on a day-to-day basis. For instance, my computer science course books spent a lot time dealing with efficient ways to sort (e.g., “bubble sorting”). But .NET provides me with sorting functions that are sufficient for what I’m trying to do. As I read new things, however, I come across concepts that were briefly touched upon in my CS 101 books. So I recommend working through any decent book that you can find.
Your First Programming Language
Of the CS 101 books you might choose from, many include a programming language in their title, e.g., “An Introduction to Computer Science with Python”. One way you might choose your first language is based on the book you purchase. But what if there are multiple books that have different languages in their titles? Which one should you choose? You might look at reviews, their table of contents, and see what gives you the best bang for your buck.
There are groups that try to gauge how many people use a particular language to develop applications. Here’s one. Here’s another. If you looked at those links, you saw that the first lists Python as the most widely used and the second puts Java at the top. Like I said: lots of disagreement. So how do you choose which language with which to begin? Here are some relevant questions:
- What are companies in your area looking for? Python programmers? Java programmers? Something else?
- You can find out by just looking on a site like Indeed.com.
- What languages seem to have a longer track record of being used?
C, for instance, seems to have a long track record. But how widely used is C for the sort of applications that you want to build? C doesn’t seem particularly important for my location. The reason why you want to look at track records is that you want to avoid are language trends that are hot now, but which no one will care about in five years.
What languages are used to build the sorts of applications that you want to build?
It is important that you do not get ahead of yourself. iPhone applications can now be built with “Swift”, but before this new language, they were build with Objective-C. Personally, I think this would be a horrible first language.
Which language is used widely rather than just by companies in your area?
You might look back at those sites referenced above. PHP is not in the top five, for instance. But you might not rule this out for one of the “top 3″ once you realize that roughly 20% of the entire internet is now built on WordPress, which uses PHP.
There are a lot of options from which to choose. Although I started with Java, my first job was at a company that did C#. You are not necessarily stuck with whatever you pick first. What you want to get out of your first language are some of the fundamental concepts that you will likely encounter in multiple languages, whether they are compiled languages like C# or Java, or scripting languages like Python or Perl.
Full Stack or Front or Mid or Backend
After Choosing a Language: Do I Need to Download or Buy Anything?
Download, yes; buy, probably not. Suppose that you’ve chosen to learn to program with Java. Now you need an application that will allow you to write programs with Java. An application that allows you to program – i.e. write code for – another application is called an IDE, an Integrated Development Environment. If you have chosen Java, there a few options; the only ones I can recommend are Eclipse or NetBeans. These are open source. If you chose C# as your first language, you can download Visual Studio Express for free or you can get Xamarin Studio for free. If you chose to start with front-end stuff, you will probably want to download a good text editor. There are a lot of free options (e.g., TextWrangler). Whatever you decide to start with, you will need to probably download additional applications to get you started. You will also have to google search whatever you need based on what you choose and based on what sort of computer you have. Fortunately, there is a lot of free stuff so that getting started can be very inexpensive.
I should tell you that configuring your IDE can be a total pain. It took me two days just to get Eclipse going the very first time I tried. I know that I am not the only person who had this horrible experience. Make sure that you read the documentation, use any YouTube tutorials or tutorials from your google searches, and it shouldn’t be as bad.
After “Hello World”
Typically, your first application will be getting the application to at least run without an error and then output “Hello World”. Once you’ve got that up and going – and much of the difficulty in getting that is due to configuration issues rather than programming issues – then you will want to start working through your book. Do not skim it and do not avoid doing the exercises. Think of this like learning to do logic. You have to actually practice in order to get good at it. See Norvig’s Advice. It is not necessary that you do every single problem in the book. It is more important that you understand the fundamental concepts and have an idea of how to do the tasks.
A quick word about the quality of the books. Obviously, the quality will vary based on the clarity and thought of the author(s). But I’ve found that having multiple books at my disposal has proven significantly useful. Sometimes a book would treat a topic in a particular way that was almost incomprehensible to me, but then another book on the very same matter would do a superb job. For instance, the book from which I learned Java had classes and methods that spanned multiple pages. Sometimes it would refer back to methods four or five chapters earlier, which resulted in flipping pages back and forth. If you are finding your book difficult in spots, it might not be your fault, even if you are the intended audience. If you know of a place to get PDF books, that can be extremely helpful – but don’t ask me for that information.
How long should it take you to get through the material? It will depend on how much time you put into it, how quickly you learn, how many exercises you choose to do, etc. There is no general answer that I can give you. Speaking for myself, I worked through a Java book that was 1200 pages in four months; the community college I attended for one semester uses that book for two semesters and does not even get through the entire book. I did roughly 40-60% of the exercises depending on the chapter. I spent probably 40 hours a week doing this; although it is hard to say exactly given the presence of Facebook, Imgur, and other procrastination options.
Other Online Resources
So far, I have written as if your options are to go to school, read books on your own, or use Google searches. In fact, that’s not all that there is. There are plenty of online resources that try to teach you how to program. Some of these are interactive web applications. Some of these are free. I’ve used Codecademy.
There are online courses that can be non-interactive and which might be free, depending on the course, but many of them you will have to pay for. Here, I’ve used Udemy and Pluralsight. (They might have some interactive courses; the ones I have used have not been interactive.) These will likely be above your head if you are just starting out. But you should be aware of them.
There are also online videos that people make just because they want to teach you how to code. I’ve used videos from The New Boston, New Think Tank, YouTube people like Kudvenkat, among others. Some of these can be extremely helpful. The one thing I would caution about watching videos is that sometimes the videos involve sloppiness on behalf of the programmer, and sometimes incorrect information. You do not want to pick up bad habits or false beliefs. So it is best to use a variety of sources when the sources are not peer-reviewed.
What about Going to School?
If you do not have a four year degree and you want to be a programmer, I would recommend getting a degree. Most job applications will say that you have to have a four year degree, especially a B.S. in Computer Science. And having the degree will make it easier for you to start higher up and with a higher salary. This particular section is aimed at people who have an undergraduate degree or graduate degree already.
Is going back to school necessary for getting a job as a programmer? The answer is: it depends on who you ask. When I spoke with people at universities and colleges, they all told me that I should get a degree. When I spoke with people who have worked as programmers or who hire programmers, they told me that going back to school is a waste of time and money. You are probably wondering why. Suppose you went back for a degree that might take you three years to finish. When you get out, is it the case that the jobs in your area will still be working with the same technology you learned in school? Maybe, but also maybe not. One lead developer with which I worked told me that all of the stuff he uses on the job he did not learn in his computer science program; his focus was initially in IT, and only at the end changed to software development. This required that he learn most of his stuff on the job. And this points to another reason: getting the degree can involve learning a bunch of stuff you will never use.
When I looked at some of the computer science programs in my area (Southern California), I saw that I would have a lot of math and a few physics courses to take. That’s all well and good if I wanted to design computer chips at Intel or if I wanted to work with artificial intelligence. But my aspirations were not there then and are not there now. If I work with higher order languages like C#, I do not need to know anything about robotics and the refraction of light. If you wanted to go into these areas, you probably do need to get a degree.
But most job applications say that they require a CS degree. What about that? Here is one way to think about the presence of a degree requirement (I take this from anecdotal evidence having talked with people who hire programmers). Having a degree shows that you can accomplish something that you set out to do. It also gives you a stamp of approval in not being a complete moron. Yes, there are morons with degrees too; but having a degree, one might think, lessens the chances of being one. And obviously, not having a degree does not entail being one. So if you have a graduate degree in philosophy, that will likely be sufficient for the employer to know that you are intelligent. The questions then are, “What can you do?” and “Are you someone who has a good fit with this company?”
There is third option besides going back for a degree and learning on your own. You can learn at a Code Bootcamp. These bootcamps are accelerated courses that teach you how to program. They can be done from your house and you can have private tutors with sessions over Skype. Some of them require that you move to their location for a few weeks to a few months. The cost can vary significantly, from $500 a month up to over ten thousand dollars. The nice thing about these bootcamps is that they work with you extensively and have the goal of getting you a job when you graduate. Although I did not do one, I know of one person who did and was making 60k (in San Francisco) for his first job, and 95k at his second job. This was a person coming out of seminary. Bootcamps that make you move can make it difficult if you are married and your spouse has a stationary job. You’ll have to decide on whether it is worth living apart, quitting jobs, etc.
So is going to school necessary? It depends on the job you want to get. Going to a bootcamp is not an unreasonable option, but you should shop around and see what their success rates are. And it is also an option to teach yourself.
What About Certifications?
Again, it will depend on who you ask. But my sense is that getting a certificate is not necessary. Obtaining a certificate involves taking a test, paying a fee, and then getting a stamp of approval from some agency that you can put on your resume. You can get a certificate in HTML, for instance, here. Notice, however, that it costs $95.00. Some places offer certificates that are only good for one year, and then you have to renew it. To me, that seems like a cash hog. Employers are not going to care whether you have a certificate; they will want to see what you have done and what you can do for them.
So should you get a certificate? In my opinion, it can only help you, but it probably isn’t worth it. (I was told that in IT, however, certificates carry more weight.)
Getting Your Foot in the Door Somewhere
This is the hardest part of the process. Some bad news: if you live in a location where there are hardly any jobs, you should expect to move just like anyone else would have to do in almost any other career. Some good news: there are lots of great places you can live and be a programmer, and there are a lot of job opportunities as a programmer.
If you do not have a degree, it is going to be difficult to find your first job. Quite often, the people looking at your resume will be people in Human Resources. They will be looking to see whether your resume satisfies a checklist of items. No degree? Not interested. Your best chance of getting a job is either by going to someone who has power within the hiring decisions or to find a smaller start-up company that does not have a dedicated human resources group. (Not all HR departments involve just looking over a checklist of items they do not themselves understand. My current employer’s HR department included programmers who asked me detailed questions about programming during one interview.) One way in which you might go to someone who has power within hiring decisions is to go to someone you know with connections – I bet you are not surprised.
One way you can get your foot in the door somewhere, after knowing something about programming, is by trying to obtain an internship. This is the path I took. I worked for three months for free for a company, during which time I learned HTML, CSS, and some C# with ASP.NET MVC. The benefit to me was the opportunity to pick up useful skills; the benefit to the company was that they had someone who was able to pick up the material quickly and to whom they could then assign tasks. After three months, I was then working for a salary. If you do not know someone who can get you into a position like this, it is possible to find internships online. But who you know makes things easier.
Most likely, the person giving you an interview will have no idea how philosophy is related to programming and why you made the transition that you did. At every interview I have done, I have been asked about having an interesting and unusual background; it is not often that they get a philosopher applying for a programming job. Here is an opportunity for you to surprise them by making arguments like the ones I did in the first article mentioned at the beginning of this article. If you can find your way into an interview, and eventually you will get one, you want to make the argument that what the company is getting is talent, and it is worth it for them to invest money into you. Obviously, make the case more carefully than I just put the matter. You do get a benefit out of this: you will gain experience and new skills working for the company. The company will be able to get a solid worker for less than the company would have to pay had they hired a junior developer right out of a CS program.
Another option is to go to a recruiter. I recently had the fortunate experience of working with an amazing recruiter from Workbridge Associates who was able to connect me with a company for a job that was not even publicly listed. Again, connections can make a big difference, and recruiters can have great connections too. Your recruiter will want to know what skills you have; so the more you know before you seek your first internship or job, the better you will be able to be placed somewhere.