Table of contents
- Why do you want to start programming
- Considerations before starting
- The only bad way of starting is quitting
- Things to keep in mind when learning
- Imperative, functional, or OOP?
- But generally, which language should I pick?
Why do you want to start programming
If you want to start programming because you want to create the next Microsoft and become rich, just don't. Get an idea, get people that already know how to do it, and just learn Business skills.
With that put aside, if you want to learn programming as a hobby, you should start thinking about what for real would you like to do, programming is a very large field, and you can program a lot of things.
Considerations before starting
It's not a blocker for the beginning, but if you start with something that you already like, it will help with motivation and consistency.
A couple of ideas could be:
- You want to have a website
- You want to start tinkering with electronics
- Mobile apps
The only bad way of starting is quitting
Learning is subjective, so you will need to find the way that it's best for you, you will also see that there are many ways now to learn programming. I feel that the best way that you can improve on something, is to stick to what you choose at the beginning, and then try to become better at that. If you change frequently, you will just become frustrated for never arriving at a good point, and that could make you quit
Things to keep in mind when learning
Based on my personal experience, some things to you will want to try to avoid.
- Don't start learning in a too simple or too complex text environment. Notepad for windows is bad, as probably trying to learn and setup vim for a couple of weeks before even printing a "Hello World"
- Some languages are better in some operating systems. This is becoming better and better, especially with the Windows subsystem for Linux, most of the weirdness and compatibility seem to be gone. But there are still some combinations that will make your life easier than trying to force one language on an OS that is not too well supported
- Try not to be caught in major changes in a language/framework that you're using, because you will find pieces of information that are, or old, or not super straightforward, simply because there is not yet too much information around on how to do some stuff.
- Following courses are better than doing everything on your own, but it's important that you will have the same version of the tools that they're using, or else you may not understand where the problems arise
Imperative, functional, or OOP?
Generally speaking, if you're trying to learn something, you don't want to start with tricks but with general knowledge and then move forward to more complicated stuff. Also, try to achieve something that you like, don't try to do everything perfectly the first time. That said, I would partially discourage as a first language something extremely functional like Haskell, F#, or Clojure because they're very different from the majority of the other programming languages. But if that's what you like, go for it
But generally, which language should I pick?
It doesn't matter which language you choose, most languages share the same core concepts (variables, branching, loops, code splitting). This will be a very personal and subjective take on it, so my advice is to check multiple of these articles and check what's better for your case.
Try not to lose interest
Learning programming can be daunting, because the initial learning curve is pretty steep, and even if you can have very quickly some results, those results will probably not be that amazing that will make you want to continue and do more. So my first advice is to check before what you're interested in, you may want to check electronic programming (like Arduino), an app for your phone, web or desktop. Once you started knowing about this you will probably already have a good idea of which one would be your first language, since some platforms are very language-specific.
Generally what to look for and what to avoid in a new language
You probably may want to start with a language that is highly supported by the community (so that you will find a solution to what you want), and you will probably want to find something that has good editor support with a lot of help that will carry you through forming your muscle memory in writing code.
A lot of universities choose as a first language to teach, one between C, Java and Python.
Here are some pros and cons of these languages:
- Very low level, you will understand a lot of how the computer works, and you will be able to port most of what you learn in most of the languages that are out there
- Very verbose, you will need to learn a lot of things that at the beginning would be just boilerplate copy-paste
- Depending on how you start, you may be stuck to command-line programming for a while, because GUI programming in C (IMHO) is intermediate/hard level
- Strict[ish] typing will teach you about different types and how to handle them from the beginning
- One of the most used programming languages in the wild, was the default option also for Android development
- Very verbose (conceptually at the start more than C), you will need to learn a lot of things that at the beginning would be just boilerplate copy-paste
- Good support of IDEs with autocomplete, this may help you to not have to look always which function does, and it could be that some functions are even auto-suggested
- Strict typing will teach you about different types and how to handle them from the beginning
- OOP can be very daunting at the beginning
- C like syntax will make it easier to switch to another language in case of need
- Extremely good support from the community
- If you can think about it, there is a python package that does it
Communities are important for learning, because you will have faster ad better support in case you get stuck somewhere, if you're into a community, it could be a discord server, or whatever. This could be a factor also in choosing what to learn, because you might want to start learning something with a huge and welcoming community behind, rather than something very nichey with unwelcoming communities, or with the only person that knows about what's going on being the main author.