Comment originally by sarevok9 on reddit

So, you want to learn to be a programmer… I think I’ll take some time and write out a really long post about the steps you should look to taking so I can reference it later, as this comes up fairly often.

Part 1: Is programming right for me?
  1. The first thing you’ll want to do is take a look at yourself. Do you like math? Do you like Logic problems? Are you good at breaking complex problems into parts? If you answered yes to one or more of these, keep reading, if that stuff sounds like a drag, please save yourself some time and look into something else! That is all that programming is, and if you delve deeper you will find just that.
  2. Can you keep a lot of jargon that is similar in sound but COMPLETELY different in practice straight in your head? Things like Initialize and Instantiate are a good example of this. They are both techy sounding words that begin with I, but they mean quite different things.
  3. When you see a problem, do you see a “flow” to it? One where you can identify the beginning and end, as well as the majority of the work you’ll need to do in the middle even before beginning? This is a major part of programming, known as modularization.
  4. Are you the type of person who likes to keep very clean notes? Documenting processes and methods / functions in your code will not only make it easier for you, but for others to help you in programming. Being incapable of this will severely limit you in the long run.
  5. Lastly, are you the type of person who works well with others? Like it or not, programming is not a solo position most of the time. The vast majority of the time you will be working with an established team on a pre-existing project. You will rely on your team to help you, and they will likewise rely on you.
    Part 2: What do I need to learn
    

A. This is a tricky question that sort of defies reason a bit. It’s really up to you and the position that you want. Do you want to work on back-end development or front-end? (Aka. Do you want to work with data serialization / storage / handling, or data presentation) Based on your answer you should look into completely different courses.

A1. If you are into Front-End development, you should look into web-development. This will probably have you learning a mixture of languages like Xhtml, Css3, Jquery, javascript, php, mySql, and maybe some noSql solutions like MongoDB. You’ll have a choice of working with Windows, Mac, or a flavor of unix (most likely the prior two in a professional setting) due to your stuff being mostly server-side anyways.

A2. If you want to get into back-end programming, which is more ‘function over form’ as it were, you’ll likely be working on a few different languages. Starting with something like Python or Visual Basic for RAD development and then moving into more structured programming languages like Java / C++ / C# for your actual full-scale projects. There are many other languages to look into outside of the above, but if you’re looking for a job, those 3 will get your foot in the door. These programming languages are typically known as ‘Object Oriented languages’ whereas most web languages are not. (Php has objects, as do many server-side languages) These languages will have robust frameworks and different methods for handling things as compared to many web-languages.

Part 3:  What can I do to get better at programming?
  1. The easiest way to get better at programming, is to program. Yes, you heard me right. Program stuff. Spend time in your IDE (Integrated Development Environment), and make things that work. If you get stuck, google it! There is no shame in not-knowing things. Programming languages / Syntax take a lifetime to master and even then there’s little rule breakers that will throw off people. After writing swing manually for java I can tell you honestly that sometimes Syntax is REALLY difficult.
  2. Set yourself some goals, and then break those goals into parts. What does this mean? Well, an example I’ve given to some java people I’ve helped: Make me a program that uses swing to display the weather in a user’s timezone of choice (specified at boot). So this means a few things: GUI, External API’s, User Input, data handling, data parsing, and a little bit of that front-end design mentality. Then if they can do that you just ramp up. Make me a media player that handles files and feeds them into an audio codec… And all the way up to real programming. This type of project is hugely valuable to someone since it identifies their level of competency / comfort with different libraries, as well as different types of problems.
  3. Grab some books, it’s never too late, nor too early to start reading up on the problem that you’re having. This works really well with some type of schooling, since many people seem to lose interest in reading a book, as many types of programming book can be lengthy / dry in nature.
    Part 4.  What can I do to increase my chances of getting a job?
    

A. There’s a lot of good skills that you can work on, in no particular order:

  • Communication
  • Documentation
  • Acceptance of criticism
  • Speed to adapt to new situations
  • Ability to reason difficult problems
  • Ability to identify why something isn’t working
  • Ability to see why something won’t work before it breaks.

B. There’s also some programs / protocols that you can familiarize yourself with to have better chances at your job. (Again, in no real order)

  • Maven or Ivy (for Dependency Management)
  • Subversion, Mercurial, or Git (for Source management)
  • Netbeans / Eclipse / Visual Studio experience (with above plugins / add-ons working
  • One or more Unix-Based operating systems.
  • Putty (or another client) as well as SSH / Telnet experience
  • A solid understanding of the OSI model and how it works with whatever you’re programming.
  • A basic understanding of computers, networks, and how your code gets translated from what you type, to what the user sees and why.
      Part 5: Sidenotes:
    
  1. You are never too old to learn to program. There comes a point where companies will hesitate in giving you a job due to how long they expect you’ll remain in the workforce, but it is my opinion that you are never too old to learn.
  2. If you’re struggling, that’s normal. This isn’t how your brain is used to working, and it’s possible to feel more tired after a day of programming than a day of running. Your brain just aches in a way that you can’t put into words. You’ll get used to this over time.
  3. Does programming require math? Not really. But if you really STRUGGLE with math, a lot of the concepts carry over into programming. If you couldn’t handle the problem solving in math, you likely won’t here.
  4. What’s it like to work in programming? Decent pay (managers / co-workers that don’t code will make more than you), decent benefits, little room for professional growth, stressful / mentally taxing when deadlines are near. Reqs / frameworks being changes while you’re working on projects. It’s not for everyone.

That should just about cover it.

Edit:

If you answered yes to one or more of these, keep reading, if that stuff sounds like a drag, please save yourself some time and look into something else!: I’m not saying you need to love math, but math does play a role in a LARGE amount of programming (good luck ever doing hardware if you don’t know math). OOP does not focus strongly on math, but there will come a time when you wish you knew it better. The degree for CS requires a fair bit of math (through calc II usually + discrete math), that’s not to say that you “CAN’T PROGRAM WITHOUT MATH” just that certain things may be hard for you if you’re ever faced with them, that’s all.