Hands Dirty Hard Road Languages To Make You Cry: C, C++, Java (kinda)
Resources: codecademy, khan academy, coursera, odin project, freecodecamp, codewars, YouTube, any documentation that comes with your language so that you can look up how functions work and whatnot.
The rest of this is a long explanation of getting into coding that may or may not help with your problem.
In one sense the language doesn’t matter because you’re using it to understand principles of programming that can apply to any programming language. A good dev can pivot to another language because they understand common ideas in programming. You want to know about composition, inheritance, refactoring, separation of concerns and so on because once you know these in the syntax of one language you only need to pick up the syntax of the new language, not understand why it is you’re writing what you’re writing.
The need for understanding these principles also increases with how good your code needs to be. I can write scripts to help me test and they can be shoddy because they don’t necessarily need to be big, or maintainable, or work with other changing systems, or be worked on by other developers. Much like a cook can make a great meal for two and a chef can bring together many people to make great meals for hundreds - it’s all heating food… apart from the parts that aren’t.
What a language is good at in terms of the problems it can solve are irrelevant. The speed and efficiency of Golang or Rust in production environments is not going to help you to learn data types. Get a language for learning, then later you can take the ideas to a language for solutions.
Why your choice of language can matter is:
- There’s a difference between imperative and declarative languages
- Not all languages have the same features
- Some languages are harder to use
- Some languages are tedious to program in
- Some languages are rare, and you probably want to learn a language that’s useful before you have to pivot to another
- Some languages lend themselves to particular problems, so if you want to get into, say, front-end web development specifically you might want to limit your choices to be related to that.
- Good, easy to search, easy to read documentation is manna from heaven and not all languages have it.
- Some languages require environments that are a pain to set up
- If you send code to a friend to run on their computer they need to have that environment set up to do so, so you may want to consider what people near you are using. If you have a friend in an office who uses and understand python they may help debug your code on their machine, but they’re less likely to install or learn python to do it.
And that is why I love Ruby. The most zen of languages. Designed on a principle of fun. But it’s not the most useful.
So what I recommend is finding a language you like. The biggest obstacle between someone new and coding expertise is lack of motivation. You want something that’s easy to set up, easy to understand, easy to get help with, easy to run, easy to debug, easy to get productive results quickly. And that’s why “Python” will be in every answer to the question, but you need to find what’s best for you. Some people will, without a single drop of sarcasm, suggest that C or C++ are the best learning languages because it forces you to learn the complexities of the language and makes it easier to transfer those to other languages later on. I wouldn’t be that bold, but everyone’s built different and I think there’s room for souls of all colours in this world so I don’t knock the advice. Just make sure you’re not taking on your first language only because it’ll get you a job because you may not fully understand what you’re about to take on - and if you’re going to go into proper code-writing then you’ll be learning the complexities, patterns, metapatterns and so on of various languages eventually anyway. Even if you start in Python they don’t put parallel programming on page one of the book - but learning about threads in Python down the line can still help you prepare for working with something like node.js, for example - even learning/scripting languages have complex ideas you can dip into that help elsewhere.
Finally I’ll just say that you have to love coding to become a coder. A good coder needs to be tenacious. Someone who can fail repeatedly and carry on because of either a love of solving the puzzle or a deviancy that gives them tolerance to, or enjoyment of, emotional pain. It isn’t for everyone. In my experience people who don’t love it don’t do it, those that really love it can become entranced with a kind of soul-bond with the computer via their analytical thinking to solve problems (sometimes called “the flow” or “the zone”). So find what you love. You can work from there, stop when you have to, and if you can’t end up senior developer you can at least write a cool script.