/programming-beginners

Where do I start?

GNU General Public License v2.0GPL-2.0

Beginners

Whenever someone new starts programming, they always want to know the answer to the question - "What language should I start with?". Sometimes this has some variance, i.e. the person provides some choices and they want the opinions of others on which of the given they should do "first".

Actual answer for newbies

Just pick any popular language and go with it. If you have someone close to you who is a mentor of some kind, and they are willing to teach you, go with that. If you are enrolling in a CS course and you know what language they are going to use, maybe use that. Do not listen to the static white noise about particular languages. Part of being a programmer is being an explorer. Pick one yourself, and get going with it. If you don't know where to get a list of popular ones, start here: https://www.tiobe.com/tiobe-index/

Make it Easy for yourself, remember the actual decision doesn't matter. You're going to use the language that you pick as a tool to educate you on what is actually important. It is most important to develop your own opinions. Having your own opinion means you have your own unique understanding of the tools you use. So get out there, click the link, pick a language and hopefully there is a channel for it here. Each channel has in its topic a list of resources to learn from.

tl;dr It does not matter, flip a coin and do not ask the question in chat. It causes arguments. Just go your own way, and when you have decided on which language, go to the relevant channel here.

Reasoning for this repo

If you are new -- you should SKIP this section. Skip down to "When you have your language selected".

There are a few realities about this style of question that cause problems.

  1. There is no perfect first language.
  2. Languages are not based around being good at being a first language.
  3. The people who are going to answer you are likely very biased towards their language of choice.

The biggest issue with this question is that it always causes debates:

  • "Use C, it's the father of all languages and is the way everyone should start"
  • "Use JavaScript, it is the most common and useful language"
  • "Use Python, it has a heavy focus on readability"
  • "Use Java, there are tonnes of jobs in Java"
  • The list goes on. Usually, people will perpetuate two or more of these at people at the same time. "Oh, you wanna do games dev, you should use X", "oh, webdev? definitely Y". These are also crap. New people commonly don't know anything about the domains that you are talking about. By saying these things, you're being a bad teacher and you are confusing them. This is called cognitive overload. Imagine you asked a carpenter:

You "Hi, I would like to learn how to be a carpenter. How do I do that?". Them "Oh, you should learn mahogany wood first, it's very flexible. Or you could if you are interested in statues learn oak wood first, that's very good for small carving.".

They wouldn't answer like that. That'd be stupid. They'd give you a piece of wood, any piece of wood and tell you to carve. Now, I'm not a carpenter, so the above information may be inaccurate but you get the idea. When you're starting out you're not going to make a website worth any mention, or an AAA game. You're going to figure out what an if statement is, or a variable and a constant. Those are the important things at first. Pretty much all languages have these things, so all that is left then is the resources to learn. Most popular languages have these resources readily available. That's why our answer is the way it is. And mind you, the example above is taking into account a one on one conversation. You can guarantee that there are developers that started out with all different kinds of languages. They're still all here today, developing, regardless of the variety in their choices.

When you have your language selected

You need a few things. You need a means to learn this language, and you need a place to ask questions. Hardly anyone gets it right the first time; programming is a pretty tough subject to get into, and trust me when I say I'm not gatekeeping here; you can do it as well as anyone else. You just need to devote some time to it. Below I've illustrated a step by step process for getting to grips with your first language. Follow it, and if you have questions, freely ask them

  1. Get some learning material. Books work well for some people, MOOC courses work well for others. What you use should depend on you - you know yourself better than anyone, so you should pick what learning material you use.

  2. Remember that resources aren't enough. Explaining programming concepts is not an exact science, no one size fits all. That means you'll need to ask questions. Great places to ask questions include:

  • Google
  • StackOverflow
  • The Programmers Hangout
  • Reddit
  • Class - if you're in class and you don't know something, raise your hand man!

Remember that googling is a skill; you're asking the internet "what is this thing?" Be specific about what you don't know, and it will help you.

  1. Learn how to ask a well structured question. Asking questions is hard. "This is broken" - "I need help" - "This doesn't work" are not useful questions to ask. Be very specific about what is not working. If you want a good template for asking a question here, use this:

What do you expect to happen when your code runs?

What actually happens when your code runs?

Any relevant code

  1. If you're going to provide code, try to provide the minimum amount of code possible that still demonstrates the broken behaviour. Use a service like https://hasteb.in/ to paste your code and then link it here. Pasting a big blob of code with no formatting will make people not want to help you. Make yourself easy to help!

  2. Take breaks! Don't bang your head against something for 10 hours without a break.

  3. Be consistent. Becoming a competent programmer is not something that is going to happen overnight.