"Start here" page for programming: a general FAQ
The common questions people ask about programming.
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!
- Should I learn how to program?
- Should I be a genius(mathematician, doctor, magician) to understand programming?
- I want to be hired for a software engineer position. What should I do?
- I don't know what domain I want to try.
- Why a CS degree doesn't matter?
- When to apply for a job?
- I just find it hard to understand X technology/programming language.
- I can follow coding tutorials, but I can't code basic things on my own.
- Which programming language should I choose?
- What do frontend and backend mean?
- What do programmers do daily on their jobs?
- What company to pick to work for?
- Where to work: small, middle-sized, or large company?
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. A lot of people doing programming didn't finish school, college, university, or courses.
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 are 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.
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.
Q: I don't know what domain I want to try.
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 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 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 your 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 a bot, design a page, etc. Learn something, apply, get feedback, improve, repeat(!!!!!) until you find something.
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.
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, and code something using the knowledge.
It means you have gaps. Do you learn the language syntax? For example, if you can't write a function to calculate something, divide the task into subtasks.
- Do I know how to write a function in this language? If not, google how.
- Do I know how to pass arguments to a function and read them? If not, google how.
- Do I know how to do calculations? Basic operations? Google how.
- Do I know how to return the calculation result? And so on.
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 the 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.
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 question. And, the possibility to create mobile, web, and desktop apps: frontends and backends(Node.JS).
Q: What do frontend and backend mean?
A front end is a visual representation of an application. The 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 of the data and all the stuff that the front end 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 and 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 front end is 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.
Q: What do programmers do daily on their jobs?
It varies a lot. In general, they help to create, improve, and fix the software in tech companies. The software varies. A programmer Michael creates web applications. A programmer Joshua configures a system architecture. They both might be in the same company.
Sometimes, non-tech companies hire programmers too. In this case, a dev there may be responsible for a lot of stuff. E.g. automating putting data into Excel sheets, and configuring an email server. The next week he sets up an Ethernet router, and the day after he creates a website.
For more details, see my article.
Q: What company to pick to work for?
It depends on the country you live in and what you want to do. How do you see your career path?
Country. Some countries have a large tech sector in their economy. Also, some of them have working government institutions. Such as the court system, and transparent taxes. All that attract investors, foreign businesses, and migrants. It contributes to prospering a favorable environment for developing businesses, and startups. Thus, such a country has many tech product companies.
Some countries don't have government institutions (semi)working properly. It's risky to create a tech business there because of many factors. A lack of specialists, a lack of investors, and so on.
We may categorize companies as:
- working on their own products. "Product companies".
- selling their expertise to other companies(usually foreign ones). Intermediaries. "Outsource companies".
- the ones that don't specialize in making software. E.g. a large law firm that needs a tech person to do "you know, all the computer-brr stuff".
Product companies earn money distributing their products to the end target. I.e. users or other businesses. Outsource companies earn money selling their employees' time to other businesses, sometimes individuals.
As you may figure out, selling the end product is (much)more profitable. Outsource companies should physically scale to earn more money. I.e. more employees to sell more time.
Outsource companies work on various software as well as product businesses. The difference is in the environment inside the company. When your business model is selling more employees, the quality may struggle. It also may not be in some companies that focus not only on selling more time. Outsourced businesses want to deliver fast. That's where you may work on several projects and meet various technologies.
Product companies (usually) focus on quality. They also want to deliver fast. Yet, they understand that quality should be the top priority. It's where you may work on optimizing things. Also, you see the impact you do. There are real users using the product!
Q: Where to work: small, middle-sized, or large company?
Small companies may be cozy spaces to work in. You know all your coworkers. On Fridays, you go to a pub. In the morning, you talk with many people near a water cooler. The company is flexible enough to make pivots. Tired of technology A? Let's try B. Have an idea on how to do some tasks better? Tell everyone. Talk with the CEO in the kitchen. She tells you "great job!" and implements your idea. You may try different hats while working there.
But all that depends on the people working there. Some small companies are hell to work. They're small and don't know how to hire. They can't pay a high salary, because they don't have a lot of clients yet. They don't have all the company processes established well.
Large companies may propose a higher salary and more bonuses. A project may be great: some famous big client, the tech stack is attractive, and so on. Or, you will be maintaining a legacy system written 10 years ago. You don't know a lot of people working there. Usually, large companies set up the processes(hiring, managing, etc.) well.
Middle-sized companies are something in between. They may not be "old" enough to establish a great hiring process, or somewhere is chaos. Or, they propose a high salary, an interesting tech stack, and an awesome team. Who knows.
It all depends. Ask many questions in an interview to figure out who they are.