Stop trying to learn a programming language
I hear this question all the time:
"Which programming language should I learn?"
My answer is always the same:
"It doesn't matter. Let the project decide for you."
When I first started my journey as a professional software developer, I got hired to work on an application written in a dying language on a platform that would soon be reviled the world over. This project was written in ActionScript 3, using the Flex framework. This was cutting edge stuff at the time, with a bright future, before Steve Jobs and 0 day exploits crapped in the Flash punch bowl.
The point is, I started learning my trade using a language that I’d probably never see again, but that never mattered. What mattered is that I worked with a brilliant team who took time to train me in the craft of programming. I learned the fundamentals of software development and I learned the tools I have used every day since I started that project.
An aspiring programmer fretting about what language to develop in is like a carpenter worrying about what wood to use. It’s one of many choices to be made about a project, but it does not define the carpenter’s expertise.
What matters is not the material you work in, but the tools, the craft, and the mindset you develop.
Understand version control. Git is the most popular at the moment and seems to have a firm hold on the space. Use GitHub. Branch, tag, do pull requests, even if they are just against your own code. You can version control any file. Use git for papers, blog posts, any document that you’ll want to have a record of changes to.
This is among the most important skills you’ll need as a developer. This will come up over and over and over. Get comfortable navigating the file system in the terminal (
ls), running applications, viewing and changing permissions(
chmod), piping data from one app to another (
|). Searching for text strings in a file or directory (
Eventually, you’ll need tools like
scp and the whole panoply of command line utilities available on the Unix platform. I’m told Windows has stuff like that too.
Where is your code going to execute? How will your users interact with it. For me, right now, that’s in the browser and Node’s V8 engine. Well, what is a browser? How does HTTP work? What tools are available to developers?
This is your world. These are the rules that will define what you can do and the platform on which you’ll be doing it. This is your users whole experience. Before you learn anything about a language, you have to understand the environment in which it will execute.
Buy this book and read it more than once.
Your early code is going to suck. In fact most of your code is going to suck, as will most of the code you will ever read. Nevertheless, you will persevere in the eternal struggle against entropy. You will endeavor to make your code readable and performant and something you are proud to show to others. Embrace simplicity, modularity, decoupling, testing, automation, documentation and all the other hallmarks of a software craftsman.
Check your ego at the door.
You’re going to hear criticism of your bad code, don’t shy away from that. Embrace it, learn from it, write it down. Endeavor not to make the same mistake twice. Do not hide your code, seek review and criticism. This is how you will grow. Seek out more senior programmers and read their code. Show gratitude when they take the time to tell you what to fix in yours.
Make stuff constantly
Some people can read book to learn how to do things. Not me. I can only learn by doing things badly and then researching, reading and iterating over it. Hence, I must constantly be working on side project to learn how to do anything. Think of something you want to make and then figure out how to do it one small piece at a time. <– This is the secret formula for becoming a software developer.
Read, read and listen
There is so much to do! Why are you fussing about which language to learn? Focus on what you want to create. Become a technologist and a craftsman. Make things! Start right now! You’ll learn language syntax as you go, but it will be incidental to learning how to create software holistically and how to make cool things that people will want to use.