Many people try to understand whether they want to program, what programmers do in their daily work, what they can do with programming at all. But they fail to comprehend oftentimes due to scarcity of such information - I would call them "initial" or "start here" articles. If you want to understand, if this kind of activity fits you, or what you'll be doing, what you may be doing, what's possible, what is not, and where to start, then continue reading.
TL;DR: pick an area that interests you, learn the basics, start creating real but tiny projects. Practice as much as possible. Then practice more.
Disclaimer: I write this as I would want to read such an article if I were in a desire to understand whether coding worth pursuing and if so, where to start the journey and what to learn. My programming experience consists of developing web applications mostly. I don't write about hardware stuff.
Programming is a process of communicating with machines that allows us to explain to them what they should or shouldn't do in particular situations. It looks like speaking in a strange language to a machine, but somehow it understands you. Also, people that know the language can read the instructions you've given to a machine. There is a lot of such languages. Some programmers "speak" multiple of them.
Summary: programming is telling machines what to do.
By managing machines, you could create amazingly interesting and complex programs/systems that simplify routine tasks. Or, makes something fun. All the electronics are programmed to help us in our routine tasks. An automatic light bulb that turns on when you come closer? Programmed! You may even program magic worlds inside a machine. Websites, for example, or video games. Besides laws of physics and technological progress, you rely on imagination and skills to build something handy.
We have billions of machines waiting right now to do something. This is your smartphone waiting for you to open a browser to search for "how to start programming" articles. Your Wi-Fi router is expecting to handle such a network request, it asks other machines over the Internet(also called servers) whether they have such information. Those servers handle the request and send information back. All of them are programmed to do a specific set of tasks.
Eventually, there are billions of machines waiting for us to give them useful work to do in a cloud! Merely imagine, what kind of systems we might build upon such a quantity of computers.
Let me return to simple words. So, what I, as a programmer, can do?
I'll describe a kind of work I do - web apps related.
A bit of "why"
Some individuals and companies are interested in creating and/or maintaining web pages that everyone can reach over the Internet. They represent a business they do in a physical world, so maybe they need a business website. Thus, people searching for such business could see their web page, read useful information, deciding whether they want to pay for the services the company provides.
Some businesses sell something online. Thus, they need a web page(simply put) that could handle customers' requests, the selling-buying process, and so on.
I'm trying to say there is a lot of demand for creating web pages(or apps if you wish).
Companies want websites, alright. Then?
They may reach out to the companies that help to create websites. Let's call them digital agencies. They have the expertise, businesses want websites, agencies create such for money.
A digital agency has programmers to do so. They know how to build a website, they build it. That's all the story in generic terms.
There are also other similar kinds of agencies out there. They only sell programmers' hours, not a website. Some of them charge per one project, which includes programmers' work, testing, gathering requirements, managing staff, and so on.
There are product companies that don't sell people's hours. They build a product that has value by itself. It's a viable(or not) business already.
There is a business side management that tells developers what they *want* next. Engineers discuss the plans, how they're going to implement the business' wishes, what aspects require extra consideration, and so on. Thus we have a TODO list with all the tasks for a specific project. Each engineer takes one and starts working on it.
This scheme is simplified but presents an actual set of things.
If you're a beginner, you're gonna do simplistic stuff. Senior colleagues expect you to ask them many questions and often. While accumulating more experience, you'll be doing more intricate things and sense more responsibility.
Daily tasks vary greatly among projects. But most of them incorporate actual coding. You should make something work in a particular way. As we talk about web apps, there are a few categories of programmers.
Front-end developers. They do the stuff you can see when opening a website. Those elegant blocks, texts, modals, well-aligned images, animations on a page - the fellows in charge of that. They know HTML, CSS at a minimum to design static pages. The simple ones. HTML is a markup language to tell a browser *where* to place things. For example, I want to put a navigation menu at the top of my website, then 2 images just below, and at the very bottom I want to see a text saying "Sergiy's website". All of that is possible to convert to HTML, so browsers can interpret your wishes accurately.
CSS is a language of styles. It gives raw HTML elements a good look. It may set a colour for text or blocks, its size, width, height, anything. With HTML & CSS people create static websites. By static, I mean the ones that don't require additional logic such as handling button clicks, reacting on mouse double mouse click on a specific element, and so on.
To sum up, front-end developers create a visual part of websites, and also they build a logic that tells how the visual part should behave. Wait, are there any other parts of the website? Yes, the back-end(server) part.
Back-end developers. They write a logic that transfers, validates, sanitizes data from a front-end(a visual) part, puts it in some storage, and retrieves it. A server manages data. Why do we have a server(s) at all if a front-end(let's call it FE) part also may have logic? FE is limited by a browser environment, hence we can't do all the possible stuff there.
Server-side(back-end, BE) developers usually write an API for FE or other servers. What the API means? Let's find out what Wikipedia says:
Application Programming Interface, which is a software intermediary that allows two applications to talk to each other.
It's like mouths and ears for humans. I speak - you hear me and vice versa. Such a way of interchanging information.
For a more practical example, let's recall the online store website. You want to buy something there. FE collects your data and then sends it to a server that verifies whether it's valid, checks you in a database(is it a registered customer? does he have a subscription?), then it speaks to a bank's server that handles the payment if there was any. After all these checks and manipulations, the server answers to FE that we got this, the customer has paid for the product, let's show him a thanks message on the website.
So, FE speaks to BE via API it provides, they interchange information and work together. Some people know how to do both FE and BE parts.
Full-stack ninjas. They have the skills needed to do FE and BE. Thus, it allows them to create web apps from scratch on their own.
There are mobile developers who are FE fellows for mobiles, we can also cover that in the following section.
Practice, practice, practice.
So, as you now understand what kind of work the programmers do, maybe you already realize a direction you want to choose: FE, BE, mobile apps. If you don't, that's OK. All you need is more experience. You'll get it.
No matter what path did you pick, you should start building a real project. By project, I don't mean an Amazon delivery system alternative. Any code you'll write can be considered a project. You could have a basic theory such as target programming language knowledge, or fundamentals of computer science. If you don't have the fundamentals, that's OK. Just jump into the creation of the actual things. It solves a problem when you have a theory you don't know how/where to apply, though it gives us a new issue. Without a theory, we may find it difficult to understand where and what we should look for when doing the actual thing. We'll try to diminish the problem.
It also depends on what're you gonna do. For instance, if you're interested in creating beautiful designs for static web pages, HTML and CSS are enough. For that, you need to look for an "HTML guide", then after each lesson code something. Then, look for "CSS guide". Combine with HTML. You don't need to learn all the HTML elements out there.
and so are enough for you to just start. Then, you'll have real questions you could google. The same for CSS, but there is more information you should know first to understand what you can possibly do.
Then, if you get familiar with such basics, you could pick up a front-end framework, but it's not necessary. Frameworks are tools that solve specific problems simpler for a developer. They allow writing less code. However, you could build websites without them at all. If you're on the edge of picking a framework, then congrats, you levelled up and should read another article.
What projects should you pick? Preferably, they should be quick and simple. Thus, you see the results and don't throw learning coding away.
For instance, you could get started with creating a personal web page where you put info about yourself. A few raw HTML blocks with text. Practice with different blocks and see the outcome. Next, start adding styles with CSS. Picture multiple similar projects to have practice with HTML & CSS for the next few days/week.
Practice a lot with new tasks, projects. Don't skip practice!
If you're interested in becoming a full-stack programmer, then you could also create a web page that shows the messages and has the functionality to add a new message.
I hope you have now a better perception of what path to pick. No matter what will you choose, a practice should be done regularly. Without applicable knowledge, it's troublesome to see the bigger picture, it's much easier to forget. Don't skip exercises if you meet any in more detailed guides. When you get the fundamentals, try to code simple projects that take you a little time to complete. Not more than a few hours. Otherwise, it's easy to throw the learning away and maybe even lost interest if you don't see quick results.
Previously published at https://metacognitive.me/where-to-start-programming/
Create your free account to unlock your custom reading experience.