"Start here" page for programming: a general FAQ

The common questions people ask about programming.
"Start here" page for programming: a general FAQ

This page covers popular questions beginners ask about programming.

I'll be updating this page once I receive new questions. If you can't find an answer to your specific question, please DM me on Twitter!

Contents:

Q: Should I learn how to program?

Do you want to be paid for a programming job or you think it's interesting? If you want to be paid, there are many job positions to consider - businesses lack talents in every field. Though software engineers are paid handsomely because of a huge demand, which isn't going to decrease, rather hugely will be increasing. More businesses will be employing technology to increase profits. Why not, if many tasks can be automated and outsourced to an army of robots in a cloud?

If you think it's interesting, it is. Try to understand what may be achieved with coding and if you're motivated, go learn basics, code something and see if you like the process.

Q: Should I be a genius(mathematician, doctor, magician) to understand programming?

No. If you have some sort of a computer, spare time, and a desire, you have more than enough.

Q: I want to be hired for a software engineer position. What should I do?

Go to Glassdoor(-like) websites and search for the desired position. Write down the common skills the companies from 20+ listings want("required skills"). The more listings you review, the more reliable data you'll have. See what is the top 3(or 5) skills they want. Learn them. Create some side projects that can prove you have those skills. Apply for the positions. Get hired.

First of all, pick a domain that seems interesting to you: web development, mobile dev, game dev, hardware, IoT, etc. If you don't know, see [I don't know what domain I want to try](TODO).

It's okay if you don't have a computer science degree, but a company declares it in a position description. Most of the time they don't care, the more weighty indicator is your skills. If you have them, don't be afraid not to be hired.

>95% of the time, the job position's descriptions fill non-technical people such as recruiters. Sometimes they copy-paste the text from other companies' positions or create their version by combining some buzzwords, or their description is based on some incomplete information from a tech colleague, so don't regard the "required" sections in job positions as absolute truth and the skills a company actually looks for.

For that reason, collect more data from a lot of the job positions' descriptions and see what's common.

Realize you can't learn a skill completely, only to some degree. Learn fundamentals, build a side project(s) and go applying for jobs to see whether your skills match multiple companies' expectations. If they don't, you now have feedback, so you know what else should you learn.

Don't consider learning a lot of stuff. For example, if you see a position that requires knowledge of HTML, Node.JS, jQuery, PostgreSQL, MySQL, PHP, React, etc., it seems like a company wants 10 people to be in one person.

Looking for a web developer role? Narrow your search more: frontend or backend? Then narrow more to a specific technology. E.g. for a backend, it can be any programming language and a framework. Choose one language. For example, for a Node.JS developer, you need to know Javascript, the Node runtime itself, plus experience working with some database or a framework for handling the usual server stuff. You'll find that in a position's description. Learn one language, top 1-3 technologies you've collected from the listings.

Q: I don't know what domain I want to try.

Go watch videos on YouTube explaining what web/mobile/game/etc. developers do. I'd hint you to consider web development because you can build a lot of stuff that can be delivered to a lot of devices via the Internet, with huge community support and not a difficult programming language - Javascript.

Q: Why a CS degree doesn't matter?

It matters to an extent, but usually, a business doesn't care about degrees if you can solve its problems. You don't need to be a genius to write a code to automate some workflow, so to simplify a living for some business. Of course, if you build rockets, then you need more fundamental knowledge. But most of the businesses don't do difficult stuff, they leverage technology to provide more value to customers, thus receiving more profits.

Q: When to apply for a job?

When you've learned the top skills described in the positions you collected. You'll build some projects in the process, to solidify the skills, so you can show working prototypes. If you don't want to show the projects, it's okay, companies may give you a test task to accomplish. E.g. create an HTML page, write some bot, design a page, etc. Learn something, apply, get feedback, improve, repeat.

Q: I just find it hard to understand X technology/programming language.

It's okay and happens when you don't have much knowledge because there is a lot to know. Distinguish what exact things you don't understand. Read a theory from multiple resources about a specific topic you picked out. Do exercises by coding some stuff to solidify the knowledge. Don't skip practice. After you practiced one thing and you feel you understand it, do the same for the other things you have a hard time acknowledging.

Don't learn a lot of stuff initially, you may not fathom it, get bored and unmotivated. That's a case also when you learn frameworks skipping a programming language(e.g. learning React without knowing Javascript). That's a case when you try to learn a few programming languages and multiple frameworks. Such amounts of information aren't gonna stick with you. Stick with something, practice it a lot.

Q: I can follow coding tutorials, but I can't code basic things on my own.

See the answer above. TL;DR: figure out what exact things you don't understand, read/watch about them from different sources, code something using the knowledge.

Q: Which programming language should I choose?

If you want to be hired, learn what companies demand. There is a demand for any kind of language and technology though. The short answer is it doesn't matter much. But, if you've picked a domain you're interested in, some languages don't fit well there because of the community support and standards. For example, you won't code in C++/Java/Python to create web apps frontend. But you can code backend in these languages.

If you're interested in data science, then pick Python, because there are a lot of tutorials and a huge amount of libraries in Python for DS.

If you're interested in game dev, see what programming languages/technology people/businesses usually use.

If you're interested in web development, there is Javascript for the frontend and any language for the backend. And if you want to create all the parts of apps, pick Javascript. For why see the next answer.

Q: Why choose Javascript?

It's easy to learn. It's easy to code. It has tremendous community support: a lot of libraries you can use to not create some things from scratch. A lot of tutorials. A lot of answers on the Internet to any kind of questions. And, a possibility to create mobile, web, desktop apps: frontends and backends(Node.JS).

Q: What do frontend and backend mean?

A frontend is a visual representation of an application. A website you see now is a frontend part of the app: its text, sections, the menu at the top, etc. This website has a backend. It handles manipulation with the data and all the stuff that the frontend can't handle. So, the frontend is the UI(user interface) and the backend is all the things under the hood we don't see. This website has to store all the texts somewhere, it can do that on the frontend, in a browser, but this information is local and can be shown only to you. Unless you host this website, therefore you can share your local data with others who are connected to the Internet. To be a host, you need to be connected to the Internet, have a static IP so other people/robots can "talk" to you. We call such hosts backends or servers. All the stuff on the Internet is stored on servers.

So, the frontend is a part of an app that represents visual things. The backend is a part of an app that handles all the other stuff apart from visual things: communicating with other servers, storing data in databases, etc.