How do you get a programming job? It seems obvious, just apply for jobs until you get one. But that's not so easy for people coming from another industry, or people who have no programming experience. To get a programming job you will obviously need programming experience. Even getting a freelance job will require you to have some kind of portfolio. Also, there are many programming career paths. You could be a rocket scientist, a web developer, a genome researcher or a hardware programmer, just to name a few. For the purpose of this post, we will focus on the career path with the most jobs, web programming.
You will need to learn a few different technologies, and then you will need to practice, practice, practice. It should be said, first and foremost, to make money programming you have to want to program. This article is more of a birds eye view of how to get a programming career started. It is not intended to dive deeply into any specific area. There are already many in-depth resources for each topic I am going to cover.
Aside from an elementary knowledge of computers, this is the most basic thing you need to learn. HTML and CSS allow you to layout elements of a webpage. This is the most fundamental thing you need for web programming. It is useful to note that HTML and CSS are not programming languages. HTML is a markup language, and CSS is a stylesheet. Neither is Turing Complete. There are thousands of HTML and CSS tutorials out there, so I won't cover that here. Just google 'html tutorial' and 'css tutorial' and you should have no problem finding tutorials to last you for days.
Like HTML/CSS, there are hundreds of tutorials out there to guide you through learning this stuff. If you need help finding some tutorials, msg me on twitter.
Become a Front-end Programmer
You will need to spend lots of time practicing HTML, CSS and jQuery. Plan to spend weeks to months understanding the basics of these three languages. If you think months is a long time, keep this in mind: with just these three skills, HTML, CSS and jQuery, you would be considered a front end developer. A front-end developer with a few years of experience will command a salary of 75-100k anywhere in the United States. If you don't believe me, please google it.
So take your time and truly understand the power of HTML, CSS and jQuery. Once you do, you will be in command of a powerful toolset that will allow you to make websites for the desktop, tablet and mobile devices.
Front-end programming is also called client-side programming.
Learn a Back-end Language
There are many languages to choose from: Python, PHP, Ruby, Java, C#, and plenty more. That seems like a lot of languages to learn, and it certainly is. But you should pick just one to start with. I suggest Python. It has the most readable syntax, and is easy for a beginner.
Here is some good news. All these languages accomplish the same thing: if/else statements, for loops, while loops, variables, data types, operators, data structures and standard libraries. Once you have learned these concepts in one language, it will be much easier to apply them to any language.
There are some core differences though, such as interpreted vs. compiled languages, open source vs. commercial, and syntactical differences. Part of becoming a proficient back-end programmer is mastering multiple languages and programming styles. Like front-end programming, expect to spend months learning back-end programming. A back-end programmer is a job all by itself, with salaries ranging from 60k-250k. Back-end programmers are also more versatile. While front-end programmers are almost always web developers, a back-end programmer could work in a variety of fields, from web to finance to research.
A back-end programmer is also called a server-side programmer.
Learn a Good Web Framework
The next step is finding a good web framework for your back-end language. I suggested Python for the language, and I would suggest Django for the framework.
A web framework is basically a software library that simplifies your web development. All the good web frameworks provide a similar set of features. Web request/response handling, database modeling, user authentication services, URL routing and web form handling are just some of the features that a good framework will have.
Django is a good web framework for Python. There are lots of other frameworks such as Ruby on Rails, Drupal for PHP, and many others.
Learn a Database
A database is where you persist (store) your data. There are many database options, but I would go with MySQL (pronounced my see-kwul). You will need to setup a MySQL database on your computer, and you will need to install mysql libraries so your programming language can talk to your database. Once you have your database setup, you should look at what kind of database support your web framework has. Database support in a web framework is typically known as an ORM (object-relational mapper) or a model layer. Your framework should have a way for you to define a database model and interact with it programatically. This is a rather huge topic, and you should expect to spend a fair amount of time understanding databases and how they work.
Build Up Experience
There are two ways to make money programming: either have a job or do freelance work. To do either, you will need some kind of experience. There are a few ways to build up experience. The most important way is always going to be spending time. No matter what, you will simply need to spend a lot of time programming. But it is also important that you have something to show for it.
You can start by programming a personal homepage for yourself. This is a good small project, and you can use this website to showcase the rest of your work. Once you have your own site built, you can start building experience by freelancing, or you can get a job as an intern or an entry-level programmer.
Start looking for small freelance projects on Craigslist, Elance and oDesk. It is important to start small with your first few gigs, don’t take anything more than you can handle. It’s better to let work pass you by than to take work you cannot complete. You don’t want to build a bad reputation.
Freelance hourly rates vary wildly. A newbie programmer will charge typically somewhere around $25-$75/hr and experienced programmers will charge anywhere from $75-$250. The hourly rate will vary by client and by the nature of the work you are doing. You should start by charging less, and then slowly raise your rates as you become more confident and experienced.
Make sure to always be updating your personal homepage with samples of your work and screenshots or links to your projects. Keep your resume up to date as well, and always make sure you have a good relationship with your clients so that you can use them as a reference later on.
Getting an entry-level job or an internship can be challenging for certain people. Getting an entry-level job may be more feasible for someone coming out of college than for someone who already has a job and is coming from another industry. Entry-level positions are usually filled by people aged 22 to 25, and are no pay or low pay positions. Entry-level positions will usually see a slower development growth than a freelancer. An entry-level employee could expect to put in 2-4 years before being bumped up to a mid-level salary range.
So by now a few years must have passed, and you must be a master of HTML, CSS, JS, Python, and probably a few other languages. You probably learned what OOP is, you are probably an Ajax ninja, and you must be very familiar with JSON. Maybe you’ve built your own API, or are consuming someone elses API. Perhaps you’ve built a mobile app and made a killing in the App Store. If that’s the case, let me just direct you to my little donations link over here…
Here are some good books which will help you along your way
Dev/Code/Hack is a technology and business blog by me, Par Trivedi. I'm a software engineer and I've been writing code and managing teams for over a decade. This blog serves as a way to share thoughts and ideas about the tech/startup community, and also to educate newcomers to software development.