I agree with @tommy5dollar. For context, I’m a Software Engineer that is entirely self taught: I have no formal education, and the same is true for many of my successful friends – although I also have very smart friends who have degrees in Computer Science and it has definitely provided benefits to their understanding of the field. That said, I don’t know anybody who started with Computer Science. Computer science is to programming what mechanics is to driving a race car.
Although the comparison between programming languages and human languages are few and far between, there is one key area in which they are almost identical: you need repeated exposure to a language to become fluent. This means that an hour spent on CS concepts is worth much less than an hour spent writing code.
Your biggest enemy when learning something new is becoming discouraged. Focusing on abstract concepts outside of a classroom is difficult for even the most academic of learners. There is certainly a lot of value in CS courses however they are, in my opinion, most valuable once you already have a solid understanding of what programming is and you’re already invested in it.
The recommendation I always give people who ask me how to learn to code is fairly simple: don’t “learn to code” to be able to code, learn to make things that are interesting to you. Learning to code doesn’t work in the sense that you start at 0% knowledge and then after a x amount of learning you have 100% knowledge. Programming is a constantly evolving field and there are core concepts but you never stop learning, I’ve been doing this more than a decade now and still every day I’m learning more.
Why do you want to learn to code? What interests you most? Do you have a desire to build mobile apps, or perhaps you have a time consuming process at work that you’re convinced could be streamlined with some code? Find something that interests you and use that to drive you forward in learning.
I started out making very dumb little websites, I had a group of friends online that all had profiles on a service that tracked what music we listened to, so I made an aggregator that used the service’s API to display our listening data alongside each other. I made a website that aggregated all of our posts on a forum so we could see statistics about our posts. I made so many websites and tools that met a need I had and through that process I learned so much. The code I wrote back then was garbage and certainly I spent a lot of my time frustrated and confused but because I was passionate about what I was making – code was a tool, not the goal – I persisted and since then I’ve built a successful career.
The actionable steps I’d recommend are:
- Decide broadly what you want to make at first, this isn’t a long term commitment but it will help guide you next steps, e.g: do you want to make mobile apps? websites? desktop apps? command line interfaces? devices?
- Find a resource that introduces you to the basics of what it is you want to build:
a. Ray Wenderlich provides fantastic iOS development tutorials
b. Codecademy has great interactive tutorials for a variety of languages
c. Treehouse offer a variety of web development lessons
- Make things! Set yourself small attainable goals, and be proud of yourself when you achieve something, and don’t be discouraged when you have no idea what you’re doing. You’ll feel like an idiot every day but that’s normal, perseverance matters a lot more than talent or brains.
Programming is ultimately a way of understanding problems: you take a problem and communicate the solution to a computer through code. Learning that is hard and time consuming but it’s doable and easier than ever thanks to the availability of so many high quality resources for every type of learner. The language you use is situation dependent, an established software engineer can pick up new languages relatively quickly, because the programming fundamentals are what matter most, not the language, so you should start learning with the language that will most keep your interest through the learning process. Don’t feel paralysed by the choices you make now, they don’t matter, all that matters is you do stuff.
Everything I wrote here can be summarised in 3 words: just make stuff.