I get emails from people who want suggestions on how to become a programmer, so it might be a good time to write a few notes on it.
EDIT: Programming as a career, not learning to program by itself. This is all based on the folks I've helped through the years and talking with other programmers on how they got into this as a career. Learning programming itself is a completely different topic.
1. Get An Education
Get a degree in computer science or the equivalent. It doesn't matter whether it's a four year, two year or technical school. The whole point is that no one will hire you without experience unless you have a degree. Don't expect to learn everything you need to know, however. The point of the degree is to get you your first job. Most of what you need to know you will learn later anyway.
In the 80's I had no degree in computer science and got my first job because they were desperate and I had some graduate experience (in Chemistry). Today it's different where getting your first job virtually requires a degree.
My sister got a two year associate CS degree, went to work at IBM and is now a VP (in charge of fostering CS educations no less).
2. Can't Get The Education? Back Door It
Work in QA (Quality Assurance). Assuming you find a good quality QA department (which isn't treated like a third-world stepchild) in a company with a lot of software development, you have a great opportunity to be exposed to software, interact with programmers, and hopefully absorb some education. It may take time, and you might have to switch jobs but eventually opportunities will show up; it's always easier to build programmers from within than hire from outside. Once you have a real programming job then you're no different than the "educated" folks.
3. Pick A Language and Learn It
If you've never programmed before, where do you start? Lots of people will suggest things here (usually their favorite language). So many to choose from, it's hard to pick just one.
Languages come in many flavors, here's a hacked up attempt to categorize them:
- Traditional Procedural Languages (C, Fortran, Visual Basic, etc.)
- Object-Oriented Procedural Languages (C++, Java, C#, Smalltalk, Ruby, etc.)
- Functional Languages (Haskell, Erlang, Clean, Lisp, Scheme, etc.)
Most jobs today fall into category #2. Speaking of jobs:
- Microsoft .Net World (C++,C#,Visual Basic)
- Java World (Java)
- Everything Else
These are the divisions in the world regarding the platform, which is the programming language, frameworks, tools, environments and philosophy that binds it all together. Most jobs are in the first three.
So what to learn? It might depend on where you live, not every location has enough opportunities to provide prospective jobs. If you live in a high tech area (Boston, New York, Bay Area, etc) you can go with a less popular, but more learnable and advanced platform.
My suggestion here is learn Ruby. Fewer jobs but most are smaller companies more likely to hire less established programmers than Behemoth Inc. Another choice but with more jobs might be PHP, it's easy to learn but in the hands of less experienced programmers you can learn a lot of bad habits. Learning Ruby will make it easier to learn Java or C++ than if you start with PHP.
Of course you could learn something from the functional languages but be advised that the number of jobs is far more limited, and you will not be able (or want to) switch to the more common procedural languages like Java or C++.
The largest companies are more likely to use Microsoft or Java than anything else (although PHP is pretty high up there too). Learning these platforms takes a whole lot more time; it's not just the language but all the associated frameworks, tools, environments and servers that will tax your brain. With Java you have more choices for tools (free!) and frameworks (also free!).
Programming can also be split into areas (along with the more common language choices):
- Web Programming (PHP, Perl, Python, C#, Java, Ruby, etc.)
- Desktop Application Programming (C++)
- Server Programming (C++)
- Database (SQL)
- Communications and Network Programming (C++, Java, Erlang, Haskell)
- Scientific Computing (Fortran, C++, LISP)
4. Write Code
The only real way to learn to program is to program. Period. You can read books and tutorials, attend seminars, even get a degree; but unless you write code you will never be an effective programmer. Lots of code. Broken code (learn to debug). Most programmers start young, have lots of time to code, and learn useful lessons early just by doing. Don't just write little snippets (like many college courses make you) write useful stuff, web applications, calendars, widgets, basically anything that someone (even you) can actually use. I started off writing little apps for a food coop, and a newsletter writing application. Writing a sort routine will not teach you that much. Having someone depend on something you wrote (even minimally) teaches you a whole lot about debugging, and design, and users, and feature requests, all useful things to know.
Like I have said before, I read blogs, programming news sites, basically anything I can find to keep up with what's going on, changing or sucks in the world of programming; even stuff I don't use. It opens your mind to other approaches and other ways of solving problems. Don't for a moment ever think you know enough and can stop learning. That's when the technology steamroller runs you over and leaves you behind.
6. Hang Out With Other Programmers
You can learn a lot from other programmers, both good and bad (and good and bad things!). I've always been willing to mentor other beginning programmers or answer questions on how to do something. Not everyone does, but you can tell. Pick their brains.
If after all this, you find you don't enjoy programming, it's too difficult, you want to toss your computer out the window, then find another line of work.
Or like the rest of us, come back tomorrow and try again.
Also read my post All I Need To Know To Be A Better Programmer I Learned In Kindergarten.