How to learn programming from scratch. How to start learning programming for a beginner? Low and high level languages

Start
Where do I begin?
Which programming language should you learn first?
Where can you find quality educational resources?
How to improve skills
How to go from beginner to intermediate?
Where can I find practice exercises and project ideas?
How to improve the skill to implement tasks / tasks in programs (algorithmic thinking)?
I can't think of a cool idea for a project. Am I just lacking creativity? How do other programmers look for inspiration?
Where can I find examples good code and projects for learning?
How to learn topics that are covered in standard university computer science programs?
How to start a big project and not abandon it?
Common fears and concerns
Am I too old for programming?
Is there anything else I need to learn first?
Do I need to be good at math?
I google a lot or don't know how to do things when I'm about to start. This is bad?
Is programming difficult?
Questions about training
What does it mean to "know a language" or "be able to program"?
I just started learning language X. Should I start learning language Y?
Is it worth learning more than one programming language at the same time?
Is it bad that beginners sometimes have problems with tasks and exercises?
How to find/keep motivated to learn to code?
Where do I start X?
How to start making video games?
Where to start doing websites/web apps/web development?
How to start making mobile apps / android apps / iOS apps / apps for Windows phone?
How to automate anything?
Terminology and vocabulary
What is the difference between computer science (CS), computer engineering (CE), software engineering (SE), programming and coding?
What is the difference between C, C++, Objective-C and C#?
What is the difference between Java and JavaScript?
Tools and versioning
What is Version Control/Version Control? Should I use it?
How to get started with version control?
What is an IDE? Should I use it?
Computers and operating systems
What operating system should i use?
Which computer/laptop should I buy?
Career and work
Is it possible to earn a lot of money from programming?
Can you get a job in programming without a degree in computer science? Or no higher education at all?
How to enter this industry and get a starting position?
What to do next?
No more newbie
Programming is just a tool
How to Improve Your Programming Skills
Miscellaneous
How to teach programming to a child?
How to contribute to open source projects?
I have a question about C/Python/other language.
My question is not there. What should I do?
Yes, my question is in the FAQ, but I want an answer from a real person.
How to edit the /r/learnprogramming wiki (including these FAQs)?

Where do I begin?

If you want to learn how to code, it's good to start by understanding why you need it. In that YouTube video Kevin Cheers did a great job of explaining how to approach learning to code.

Next, do not forget that there is no universal way learn to code - everyone learns a little differently, and you may need to experiment to find the option that works best for you. However, most people use the following approach, which we highly recommend:

  1. Find a small problem or project that you are interested in solving. You can try to create a tool for solving a small life problem or implement a program from scratch that you find interesting. A project like this motivates you to keep learning to code and gives you the opportunity to put what you learned into practice.
  2. Read the information about different programming languages ​​to choose the most suitable one for your project. (See recommendations below).
  3. Find one quality beginner's resource for that language and stick with it. (Also see below).
  4. In addition to this resource, google and ask questions.
  5. Do some original projects in this language.
  1. You can’t just passively study the selected resource: do exercises and homework; Practice is an indispensable part of learning to program.
  2. Do not switch unnecessarily from one language to another. Pick one and stick with it, because programming is all about solving problems, not learning languages. Problem solving is difficult to learn and can only be honed with constant practice. Every time you switch to another language, you waste time in which you could practice applying what you learned to develop problem-solving skills.
  3. Don't stop learning after you've completed a course. Programming is one of those areas where there is always something to learn.

Finally, remember that learning to code is a long and difficult process. If it's hard for you, don't worry! This is absolutely normal, and many people study and train for years until they feel competent enough to look for a job or contribute to a serious project. Luckily, just getting started isn't that hard at all.

Which programming language should you learn first?

There are two common misconceptions that lead people to ask this question. The first is that there is a “best” programming language, and the second is that the first language you learn will determine your career in programming once and for all.

Actually does not exist better language, which is definitely worth learning first, and it will not play a critical role in your future career. Externally, programming languages ​​seem very different, but most of the fundamental principles flow from one language to another. In addition, learning new languages ​​will become easier over time: it can take months for a beginner to feel confident in the first language, while an experienced programmer will become familiar with a new language in a matter of days.

Ideally, all programmers should be proficient in different types languages. Once you have mastered one language, you can take on another, which is fundamentally different from the previous one. As you learn new languages, you will be able to choose from more the most optimal tools for solving a specific problem, and this is an indicator of a good programmer. Since programming principles are of the utmost importance, we recommend that beginners start with one of the popular languages ​​in the table below. With any of them, beginners will be able to start creating simple applications and practice coding without touching too advanced features of the language.

If you already have a project idea or goal in mind, you will learn faster if you can apply your skills to the task at hand. The table below lists the recommended languages ​​for common projects.

I want to learn…

  • …develop iPhone apps - Swift (more)
  • …develop applications for Android - Java (more)
  • …create websites - JavaScript, CSS, HTML5 (more)
  • …write desktop applications for Windows - C#
  • …create 2D/3D games - JavaScript, C# or C++ (more)
  • …program Arduino/microcontrollers/robots - C
  • …do scientific/mathematical calculations or data analysis - Julia, Python, R or Matlab
  • …do automation and scripting - many languages ​​(Python, Ruby, Bash, Powershell, AutoHotKey…)

If the list does not contain what you need, look for other options on these resources:

If you still can't make up your mind, learn Python. It's a good, easy-to-learn language with a huge community and lots of libraries that you can use to do just about anything, from creating games to automating processes at home or at work and analyzing data to build a website. Try to find a learning resource that breaks down the key principles and fundamentals before diving into more advanced application development. Instructions on how to start learning any language can be found on the getting started reddit page.

Where can you find quality educational resources?

How to improve skills

How to go from beginner to intermediate?

A typical question we get from many newbies is "what's next?" In particular, when they tried to work through some lessons, manuals, courses, but in the end they still could not fill the gap between understanding how the if statement or the for loop works, and how exactly to apply what they learned to create complex and interesting programs.

Moving from tutorials to complex code can be difficult, and is a common thing for those who are learning to code. Such a phenomenon is very well described in this article. Many courses (especially commercialized programming sites like CodeAcademy) help you get the basics right, but end there and leave newbies treading water.

But if you don’t give up and overcome the confusion, you will begin to notice that you are gradually getting better and better, until one day you realize that, without realizing it, you have already begun to reach a new level.

Here are some tips on how not to give up and what to do next.

Move from passive to active learning

Instead of taking courses and lessons that (you think) will teach you what you want to learn, start actively looking for ways to learn on your own. For example, if you have no idea how to make a game, google "how to write a game in X", where "X" is the programming language you are going to use. If you get an error message that is unfamiliar to you, try googling it. If you want to learn machine learning, google it and find a good book, tutorial or online course.

You will often come across study guides, explaining exactly what you should do, or at least articles that will give a general idea and tips on how to write more accurate search terms. Moreover, there is nothing shameful in looking for sources of new knowledge - just the opposite. All programmers, both novice and professional, are constantly doing two things: google and learn.

Keep practicing

Programming is like exercise in the sense that the only way to get better is to practice consistently. Start small and try writing a simple rock-paper-scissors game in command line. When you're done, try to take on a bolder project and stick with it. If you wish, you can do some programming exercises in parallel.

The main goal of programming is to develop applied problem solving, and the best way to learn this is to constantly solve problems, large and small.

(See also FAQ: Where can I find practice exercises and project ideas and FAQ: I can't think of a great project idea. Am I just lacking creativity? How do other programmers look for inspiration?)

Learn to decompose a problem

When trying to cope with a large project or task, one can become frustrated just by how big and intimidating they look. Instead of getting discouraged, break the task into smaller and smaller subtasks (this is called decomposition) until each individual subtask starts to seem quite manageable and feasible.

Let's say you want to create a rock-paper-scissors game. It can be divided into several subtasks: how to get input from the user, how to get the computer to make a random choice, how to determine the winner, and how to repeat the game (if you want to play multiple times in a row).

If you're not sure how to solve each of these subproblems, keep breaking them down further. For example, if you do not know how to determine the winner, you can subdivide even more subtasks: how to determine a tie, how to determine your victory (if you choose stone), how to determine your victory (if you choose paper), and how to determine your victory (if you choose scissors).

If you don't know how to do something at all (like how to make a computer choose a random value), google it. AT this example searching for "X pick a random value" (where X is the programming language used) will return several various ways that you can use. Sometimes the task can be divided into many parts without a search engine, and sometimes you can’t do without it.

So, if you're learning Java and want to learn how to write games, but have no idea where to start or how to break down a task, google "java games lessons". Searching will turn up some good sources that will teach you how to write games and (usually automatically) break down the process of writing a game into smaller subtasks.

In fact, by doing this you instill in yourself a developer mindset. If the task is too difficult, do not be discouraged. Keep breaking it down into ever simpler pieces and explore things that seem indivisible. Then again in a circle: smash, google, smash, google ...

This is a fairly effective self-learning strategy. With practice, you will better understand how to lay out tasks, as well as expand your knowledge base and stock possible ways their decisions.

For more tips, see FAQ: How to improve the ability to implement tasks / tasks in programs (algorithmic thinking).

Be systematic

When you write and debug code, never get into the habit of just trying something and hoping it will work by accident. Be as clear and consistent as possible - the "trial and error" method will not work here.

While writing the code, stop for a minute and draw up a rough plan of action on a piece of paper. Try to draw some diagrams or some kind of pseudo code. If you have to change your plan (which you most likely will), think about why you need this change and what your plan will be. new plan actions. (This planning phase is also a good opportunity to practice task decomposition!)

When debugging code, set clear goals. Try to think like a scientist: run experiments to either try to fix a bug or narrow it down, and record the results. If your guess/attempt is wrong, or something happens that you didn't foresee, stop and figure out why. You can record experiments and tests in a notebook if it helps you stick to the plan.

Bugs occur when your assumptions do not match reality. If something doesn't seem right, don't ignore it: keep looking until you figure out what's wrong/which of your assumptions was wrong.

Don't do anything until something works - be consistent.

Don't get frustrated if you have to fix bugs or google

Not all beginners understand that spending most of their time fixing bugs and searching for information is absolutely normal even for professional programmers.

Debugging (and hassle!) is an integral part of programming. If possible, try not to despair or get angry. Treat this as an entertaining quest or puzzle.

Even when, due to a bug, you can not continue working on the code itself, if you are consistent, then in any case, you will practice the task decomposition skill well, albeit in a slightly different way.

Ultimately, even if you spend many hours on a single bug, this time will be well spent. Debugging is one of better ways learn to solve problems.

(This will become even more true as you gain more experience. In life, as your competence grows, the complexity of the bugs you will encounter will only increase. Sometimes even experienced programmers have to spend months trying to find one in particular troublesome bug.)

Don't be afraid to ask for help

Finally, if you're completely stuck and have no idea what to do next, don't hesitate to ask for help!

Programmers are generally very responsive. Many of us are also self-taught and understand how difficult it is to start and what it is like when you are hopelessly stuck.

Still, first try to do your best (decompose the problem, debug the code, google, etc.) and think carefully about your post. Like any other subculture, programmers have their own unspoken rules and regulations. One of the key things is that the question should be clearly described (even if it is something elementary).

Take a more intensive introductory course

This point only applies to those who have only scratched the surface of programming in introductory courses like those offered by CodeCademy. Sites like this give a great introduction to what programming is all about and teach some of the basics, but can be almost useless if you want to get to the intermediate level.

Rule of thumb: If the introductory programming courses you took weren't too difficult or didn't contain assignments, exercises, or mini-projects, you should look for more demanding courses. Constant practice (and difficulties!) is an integral part of the learning process.

  • https://www.reddit.com/r/learnprogramming/comments/3yqhuk/why_do_i_feel_like_ive_hit_a_wall_learning/

Where can I find practice exercises and project ideas?

There is a common myth that the only way to become a good programmer - start learning to code at an early age. This is not true: although some people start learning to code early (which may give them some advantage), most people start learning it when they enter a university, or later.

Learning is possible at any age, and instead of obsessing over others, just focus on yourself and your own pace of progress. Try to develop a growth mindset and get rid of a fixed mindset.

Is there anything else I need to learn first?

There are very few prerequisites, and in general, you can start learning programming at any time.

Here are the only really necessary conditions:

  • You should be able to type (unless you're using a drag-and-drop language like Scratch).
  • You must have a computer.
  • You should be able to google/search for answers to questions on your own.

You will also need some knowledge of mathematics (algebra at a basic level) and English (because many online resources are in English), but these two conditions can be dispensed with.

All of the above is more or less applicable to those wishing to obtain an official diploma from a university. Most universities expect incoming students to know nothing about computer science and programming, and start teaching them from scratch (although in some cases you can skip one or two introductory courses if you pass the test or demonstrate sufficient skills already). If you are in high school or younger and want to study computer science in high school, you will only benefit if you start studying ahead of time - this will give you a head start, but you do not have to do this.

Some universities may be more strict about general education and math proficiency (for example, most universities have a requirement for computing skills), but these vary from institution to institution, and you should find out about them directly where you would like to apply. Read more below.

Do I need to be good at math?

Optional: Programming and computer science is a broad field, and whether or not you need to be well versed in depends on which discipline you choose to specialize in.

For example, in some areas of programming, strong mathematical skills are really needed. 2D and 3D games often use vectors, matrices, and linear algebra; in data mining and machine learning - many concepts of statistics; and it is easier to deal with algorithmic complexities if you have a good command of algebra and elementary computing skills.

Generally, the higher the level and complexity of a topic, the more likely you are to need strong math background. If your goal is to learn how to solve these complex problems, then good base will be invaluable to you.

However, just as many areas of computer science and programming do not require a deep knowledge of mathematics. The only thing you really need to know is addition, subtraction, multiplication, division, and sometimes some basic algebra. Many programmers have little to no math in their entire careers.

If you are not very good at math, you can learn and grow anyway. After all, you are probably not very good at programming yet, but you are still going to learn to code. Go to Khan Academy and search free lessons, starting with basic levels and up to more complex ones.

However, the answer is slightly different if you want to get a degree in computer science. Many universities have specific requirements that you must meet before they either accept or graduate you (calculus courses, etc.). And since computer science is, to some extent, applied mathematics, you will almost certainly have to learn discrete mathematics, write proofs, and the like in order to graduate. You don't need to be good at math to learn these topics (any math topic, by the way), but some knowledge of math will definitely help you and can make the learning process easier.

The extent to which a computer science program will be intertwined with mathematics varies from university to university. To find out the details, you should study the requirements and program content of the university you want to enroll in.

To sum it up, you don't necessarily need to be good at math to have a successful development career. If you want to become a computer scientist, be prepared to learn a lot of math. If you want to work on more complex problems/in specific areas, depending on the situation, math can be a very useful tool.

I google a lot or don't know how to do things when I'm about to start. This is bad?

We often think “if only I had enough motivation…then I could…” even though it is action that keeps motivation going. First comes the action, then the motivation. Find small specific programs that you would like to create. Get rid of everything that distracts you. Install browser extensions that block sites like Reddit, Facebook, and Twitter. Imagine for a moment how great it would feel to be a more competent programmer.

Here are some recent threads on the topic:

Where do I start X?

How to start making video games?

Modern video games are created using game engines: these are libraries of programs that allow you to work with complex things, such as graphics, sound, physics, and networks. There are many libraries available. However, the following libraries are highly recommended for beginners, as they are free and have the best documentation for learning:

  • Unity (C#): suitable for mobile, desktop, browser/online and console 2D and 3D games
  • Construct2 (JavaScript): for mobile, desktop and browser/online 2D games
  • Pygame (Python): 2D desktop game engine
  • LÖVE (LUA): suitable for desktop 2D games

Always remember that your goal is to develop games, not engines! So no need to reinvent the wheel.

Engines will help you get started with graphics and user controls for future games, but you still need to thoroughly study the programming language to write game logic, so pick up a good book or online resource.

The most important: start simple. You'll want to jump in and create the game of your dreams right away, but remember that the only way to get to the top of the mountain is to take one small step at a time. Here is a list of simple practice games in order of increasing difficulty - try some of them before you rush to your final goal:

  • Blackjack or tic-tac-toe
  • Wumpus Hunt (rules)
  • a choose-your-own-adventure game of your choice or a clone of Zork
  • Pong, Tetris or Minesweeper clone
  • Space Shooter with vertical or horizontal scrolling
  • simple clone of DOOM, Mario or Legend of Zelda

Be sure to check out the /r/gamedev FAQ, read the introductory guide on /r/gamedev , and look for older threads on /r/gamedev and /r/learnprogramming .

Where to start doing websites/web apps/web development?

There are many different ways to learn web programming, but in general the key skills you will need are front-end development (code that runs in the user's web browser) and back-end development (code that runs on your server).

Usually most people advise to start with learning HTML, CSS and Javascript (in that order) are the three major languages ​​that all web browsers support and in which all websites are written.

More information can be found in the /r/webdev FAQ. Here's another one for beginners.

How to start making mobile apps/Android apps/iOS apps/Windows Phone apps?

For each type of smartphone, you will need to learn different programming languages.

  • Android apps are written primarily in Java - read the /r/androiddev FAQ for more information.
  • iOS apps are written in Objective-C or Swift - see the /r/iosprogramming sidebar and their wiki (on GitHub) for more information.
  • Windows Phone applications are written in C#, Visual Basic, or Javascript - see the /r/WPDev sidebar for more information.

You can also create applications that will run on all three major platforms using Phonegap and Titanium technologies - applications are written once with using HTML, CSS and Javascript, and run on any platform.

However, keep in mind that many, if not all, of these tools are intended for those who already have previous programming experience. If you've never done development before, you might be better off starting by learning a language that has more resources specifically for beginners. Once you gain some experience and grasp the underlying principles of programming, it will become much easier for you to learn new languages ​​and start learning. mobile development. Section "Where do I start?" See our FAQ for more information on how to get started.

How to automate anything?

There are a couple for Windows special languages programming, such as Autohotkey and AutoIt.

Another suitable cross-platform alternative is Python. Automate the Boring Stuff with Python is an amazing educational resource.

If you want to automate MS-Office, use the built-in language Visual programming Basic for Applications (VBA). The /r/vba subreddit is dedicated to VBA programming.

What are the best…

Programming vs. coding

And finally, there was programming and coding. The difference between these concepts is very small, and many use them as synonyms. In general, the term "programming" has a more positive connotation than "coding". If you say “I am a programmer”, this implies a certain level of professionalism and indicates that you can not only write code, but also have a deep knowledge of the basics and theory, know how to communicate with clients, work in a team, etc.

On the contrary, if you say "I'm a coder", you are emphasizing that you are only doing code development, and to a lesser extent - other things.

But again, these shades are almost irrelevant here: in the vast majority of cases, the two terms can be used interchangeably.

What is the difference between C, C++, Objective-C and C#?

C, C++, Objective-C, and C# are not variations of the same language.

C is the smallest and oldest of these languages. It was originally created as a system programming language for the operating system. Unix systems and is still widely used in applied programming.

C++ is a very popular programming language general purpose, originally based on C. With some tweaking, most C code (almost any code) can be compiled as C++ code. However, C++ introduces a large set of features that significantly change how the language is used compared to C. Writing C-style code in C++ is generally discouraged.

Objective-C is a strict superset of the C language, so any working C code is also working Objective-C code. This language is nowhere near as common as C or C++, and today it is mainly used in development for Apple's OS X and iOS platforms.

C# is not based on C in any technical sense. C# is a general purpose programming language created by Microsoft and similar to Java. It compiles to an intermediate form that runs in a virtual machine (CLR), unlike the previous three languages, which compile to native machine code. And although C# borrows syntax elements from C and C++ (like Java), it is technically unrelated to those languages.

What is the difference between Java and JavaScript?

Java and JavaScript are as closely related as creme and creme brulee.

Similar to the previous question, from a technical point of view, Java and JavaScript are not related in any way. They have some common features in syntax, since the ancestor of both was C, but no more. Wikipedia has good explanation, where this similarity in names came from: https://ru.wikipedia.org/wiki/JavaScript#JavaScript_%D0%B8_Java .

Tools and versioning

What is Version Control/Version Control? Should I use it?

Version Control System (VCS) is a tool that tracks changes in code and gives useful features how to fix bugs and see what has changed over time. Modern distributed systems also make it easy to work on the same code with other programmers. And yes, you should definitely use source control!

The two most popular distributed systems are Git and Mercurial; Which one to use mostly depends on your personal preferences, but we strongly recommend one of them.

How to get started with version control?

good and quick guide by Mercurial - .

Computers and operating systems

What operating system should I use?

A common question that many beginners have is which operating system they should use: Windows, Mac or Linux.

It really doesn't matter: these days quality and possibilities available tools will be approximately equal on all platforms, and any decent programming language can be used on all operating systems.

Still, sooner or later you should become more or less familiar with all three operating systems so that you do not get completely confused when you encounter a new OS (for example, when you switch to another machine or get a new job).

There are two main exceptions to this rule:

  • If you want to develop for Windows, buy a Windows PC.
  • If you want to develop for Mac or iOS, buy a Mac.

There are some good ways to run C# code on other platforms, but some Microsoft tools and .NET are predominantly focused on Windows.

While you can develop Mac and iOS apps on any computer, you will need to use Xcode on a Mac machine to compile and upload your app to the App Store.

And finally, it should be noted that the choice of a particular operating system does not limit your actions: you can always run virtual machine with another operating system installed on it. For example, if I have Windows installed on my computer, I can easily set up a virtual Linux machine and use it without fear that it will interfere with existing Windows.

Which computer/laptop should I buy?

By and large, this is also not critical: any laptop or middle-class computer will do. If you already have a PC or laptop, just use it - no need to buy a new one. You can learn to program and write complex and interesting programs on almost any existing computer.

If you're on a tight budget or don't have a working computer, you can always find used computers on sites like Craigslist, or ask people you know. You can get far even on an old computer if you are just going to study.

But if you need to buy new computer which you want to use for programming, first of all, pay attention to the processor, volume random access memory and hard drive. If possible, try to get a computer with these characteristics or better:

  • central Intel processor i5 (3.0+ GHz)
  • RAM 4+ GB
  • hard drive 200+ GB
  • (optional) solid state drive

If possible, it is better to prioritize a device with a faster processor and more RAM than a hard drive: extra processor power never hurts. Conversely, in general, programming does not require a lot of disk space - unless you are going to work with images and videos or process huge datasets for machine learning and things like that. However, such things can be stored in the cloud.

If you are going to buy desktop computer, this is the only important characteristics. If mobility is important to you, get a laptop, and be sure to have enough big screen and easy-to-program keyboard. However, in laptops there is a certain balance between usability and mobility:

  • The wider the screen, the shorter the battery life (but the lower you set the brightness, the longer the battery life will be)
  • The smaller the screen, the less will fit on it and the more often you will have to switch between windows / desktops. Ideally, two windows should be conveniently placed on it for work.
  • The wider the laptop, the heavier it is and the harder it is to carry around.

It's also worth considering how you plan to use your laptop. Will it just sit on a table all day, or are you going to carry it with you, or go camping with it?

If possible, test live each laptop you choose from. If, for example, you are uncomfortable typing on the keyboard of one of them and you can’t get used to it, it’s better to refuse such a laptop, no matter how attractive it looks on paper.

Additional information and more detailed help can be found in the following subreddits - they offer more individualized advice:

Also consider buying Chromebooks carefully: you'll either need to set them up or use online editors and IDEs, and you'll need constant internet access. Read more information on the links:

Even better, you need to consider whether you should use tablets or smartphones as your main tool for programming. Although programming on tablets or smartphones is possible with some effort, software development is almost always done on computers or laptops using a keyboard.

If you need advice on choosing a particular manufacturer, just remember that programming your computer does not require any superpowers: a good general purpose computer, most likely, well will be suitable for programming. (So ​​it's easier to search good laptop, since you do not need to select a device intended directly for programmers.)

One final caveat: If you want to focus exclusively on machine learning, natural language processing, or graphics (including game development), consider purchasing a device with a GPU. It's optional for all of these things, but you can often speed up code by writing it to run on GPUs.

If you are more interested in machine learning or natural language processing, be aware that you can rent machines with GPUs in the cloud using services like Web Services (AWS) or Google Compute Engine (GCE) at relatively low cost.

Career and work

Is it possible to earn a lot of money from programming?

Maybe, but only if you're a good programmer. You can earn a lot of money as a plumber or in any other field. And you may not earn. The profession of a programmer does not guarantee this one hundred percent.

Can you get a job in programming without a degree in computer science? Or no higher education at all?

Without a degree in computer science, getting a job as a programmer is realistic, as well as without having any diploma at all, although the prospects will be worse. We don't recommend dropping out of college. If programming is not for you, change your major. If for you, then completing your studies will increase your chances of success in your job search.

More detailed answers to various career questions can be found in /r/cscareerquestions .

How to enter this industry and get a starting position?

In this subreddit, this question is a little off the mark: career-related questions are best asked in /r/cscareerquestions and searched on their comprehensive wiki page.

But in general, the answers of most people boil down to the following:

  • Build a compelling portfolio of original projects that you can show to potential recruiters and attach to your resume. These can be your school projects, independent side projects, projects from clubs at school and university, research or volunteer projects, or projects done during internship or previous jobs, etc. A powerful portfolio shows employers that you can successfully apply programming languages, libraries, and technologies to solve problems, and gives them the ability to more accurately assess your skill level.
  • It’s better to look for an internship first, rather than a full-time job. It is easier to get an internship, and they are usually paid decently.
  • You definitely need a good understanding of data structures and algorithms. Most interviews, especially for entry-level positions, involve coding assignments - either on a website or live, on a whiteboard.

What to do next?

No more newbie

There comes a time when all programmers grow up, and then they face a problem - with the real world. In the real world, no one holds the handle and leads through life. Now you have to learn to go forward on your own. If you got to this point, you probably already have some kind of area of ​​\u200b\u200binterest, whether it's just programming, web development, algorithms, or something else. Maybe you would like to explore other areas related to programming, or just to understand what to do next.

Programming is just a tool

When you started programming, you may have thought about the future when you learned how to create a second reddit or incredible graphics, or how to execute various algorithms. Well, if you no longer consider yourself a beginner, then programming has added to your arsenal of tools. Now you need to learn how to apply it and consolidate your skills. Very soon you will be able to do these things and learn all about them.

How to Improve Your Programming Skills

Many people involved in programming begin to fear that they do not have enough knowledge. Therefore, many seek to improve their skills. But at this stage there is only one way to do it - practice. There are many sites and sources for training, such as /r/dailyprogrammer , CodeWars , HackerRank , Project Euler and many more.

Miscellaneous

How to teach programming to a child?

In one form or another, this question comes up here often. Before posting yours, take a look at this request - it may have already been answered. If you do decide to post a new question, please try to be clear about how your learning needs differ from those in the questions already posted.

Scratch is an amazing tool for 8-16 year olds developed by the Massachusetts Institute of Technology. It runs through a browser without installing additional software.

You can also take a look at /r/ProgrammingForKids - a subreddit dedicated to this very issue. Lots of resources.

How to contribute to open source projects?

Contribute to the projects of the /r/learnprogramming group on GitHub ! It was created by jfredett specifically to host projects where novice programmers can learn open development by interacting with experienced programmers and mentors.

The group is newly formed, several people are involved in its promotion.

If your question is indeed fundamentally different and the answers in these FAQs do not work for you, please indicate in your post that you have read the FAQ and describe exactly how your question is different and why the answers provided do not help you. This means that you have already worked hard to find the answer to your question, and will help to answer it more accurately.

How to edit the /r/learnprogramming wiki (including these FAQs)?

We welcome your input, but to be eligible to edit, you need an account at least 30 days old and a comment karma of at least 200 on this subreddit (not on reddit in general). Once these conditions are met, an "edit" button will appear in the wiki's header. If you don't have enough time or karma, just create a regular post on the topic with the text you want to add: if there is good quality, someone who can edit will almost certainly publish it for you.

The most popular service in the field of learning to code from scratch, having received several significant rounds of funding. Known for being absolutely free and created specifically for those who do not understand anything in programming. Teaches the basic principles of working with JavaScript, HTML and CSS, Python and Ruby. The training takes place in the form of short exercises with simple tasks and instructions. The user writes code and immediately sees the result of his actions.

For additional motivation, Codecademy came up with a system of incentive badges for completing a task, completing a section, or passing tests. The service closely monitors academic performance and consistently builds a course of study, suggesting which topics need to be studied further. Also, anyone can make their own course or write some exercises for other users. The most popular course is called Code Year - after passing it, you can learn how to make websites or games.

If Codecademy professes a minimalistic approach to learning, then Code School likes to fantasize and experiment. The most interesting thing about them is not the basic lessons on Ruby, JavaScript, HTML/CSS and iOS, but continuation courses like Rails for Zombies. The company's credo is Learn by Doing. Instead of boring abstract tasks, they offer users to program what they are interested in, such as zombie games.

All core courses consist of five levels, each of which starts with 15 minutes of instructional videos. Then follow the exercises, during which you can immediately get feedback and see your results. So, for example, in the course for creating applications for the iPhone, there is an emulator that shows how the code will look on the screen of the gadget. Here, too, gamification was involved: you need to earn points and get badges.

Treehouse focuses on instructional videos. Even if you are not ready for a full-fledged course on creating a website, application for iPhone or Android, but just want to get a basic knowledge of what the Internet is and how it works, it is worth subscribing to their channel on YouTube. For those who decide to start learning Ruby on Rails, PHP, and other programming languages, there are more than 1,000 video tutorials on the site. They are collected into courses on web design, programming, technology entrepreneurship and more.

Videos are constantly updated, so the courses are not morally outdated. After each video are given practical tasks, interactive quizzes. At the end of each course, you will have a small project ready. After that, the service will tell you what to study further. The site has a good user forum, you can get feedback from experts, participate in master classes. The only drawback is that training costs money, from $250 to $490 a year. Treehouse has a great free child project for those who have already learned something - Code Racer. There you need to code for speed, competing with the enemy. In the process, you can interfere with him in every possible way: for example, throw photos of cats on his screen.

If learning alone doesn't suit you, you can take online courses with other beginners at Coursera, Udacity, and other specialized sites that we have already covered. The advantage of such courses is that you have a teacher, although remote, and a certain pace of learning that does not allow you to relax. The Introduction to Computer Science course (on video) is very popular with beginners. Udacity, created on the basis of Stanford University, is good in that it provides university courses for free in a form adapted for remote learning. There is a difficulty scale next to each course. It is assumed that by completing the course with zero difficulty, you will be ready to pass the rest, where specific languages ​​are studied. Coursera also has a lot of courses for beginner programmers, for example, this one is dedicated to Python, and this one is about creating creative mobile applications.

If you suppress pride and admit that all the above courses are still too difficult, you can start with those created specifically for children. For example, the iPad and iPhone app Move the Turtle. This is a game that teaches programming through small tasks, each of which makes the turtle move. The Alice service, created at Carnegie Mellon University, teaches how to create moving 3D characters, while giving the basics of C ++ and Java. Hackety Hack is an app that teaches you the basics of Ruby. Unlike the previous ones, it does this not through pictures, but through specific language commands. But, of course, the best for kids are robots programmed to follow simple commands that first need to be written in computer code. One of these is the Sparki robot, which raised money on Kickstarter. You can pre-order, and it will cost only $100.

Photo via Shutterstock

You should start your path to a career as a programmer by answering the question, do you need programming at all? This question does not apply to those who study or have studied in a specialty close to programming. If you were better at math in school than the humanities, if you like to spend a lot of time at the computer, if you want to learn something new, then programming will suit you.

Where to begin

There are several options for the development of events, as a result of which a person becomes a programmer. The first is programmer parents who taught their children everything. These kids don't even need to go to university. The second option is the fashionable profession of a programmer. After school, I had to choose where to go to study, and they chose the fashionable direction of IT, they seemed to like it. And the last option is a hobby that has grown into a job.

If none of the above happened to you, then you have a choice of four options:

  • self-education. This option can be used on its own or in combination with other methods. The Internet is full of applications that help you learn various programming languages ​​and technologies. But this is the hardest way for beginners.
  • University. If you are finishing school and want to be a programmer, then go to university. If not for knowledge, then for a crust. It can serve as a bonus when applying for a job. Although you will also gain some knowledge. But don't forget to educate yourself. The choice of a university should be approached very responsibly. Carefully study the training programs and choose the best technical universities.
  • Mentor. It will be very good if you find a person who agrees to help you and direct you in the right direction. He will suggest suitable books and resources, check your code, give helpful tips. By the way, we already wrote about where you can find a mentor. You can look for a mentor among familiar programmers, at IT parties and conferences, on online forums, and so on.
  • Specialized practical courses. Try to look for courses in your city where you will be taught some programming language or technology. I was pleasantly surprised by the number of such courses in Kyiv, including free ones and with subsequent employment.

Which language, technology and direction to choose

When you become a programmer, in a year or two you will be free to choose any language you like. But when choosing a first programming language, a beginner should consider the following criteria:

  • Availability on the job market. The ultimate goal of this path is to find a job as a programmer. And this will be difficult to do if no one is looking for developers in your programming language in the job market. Check job sites, see who's looking for the most, write down a dozen languages. And move on to the next criterion.
  • Low Entry. If you have to spend a long time learning a language, it can discourage you from programming in general. Read about the languages ​​you chose above. Review the literature that you will need to read in order to learn these languages. And choose the ones that are written about as being light, or that you thought were light. Such languages ​​can be PHP, Ruby, Python.
  • The thrill of the process. If you don't enjoy writing code in your chosen language, you won't enjoy the process, work, or life. Do you need it? Make the right choice.

You will also have to decide on the direction of programming. Mobile, desktop, games, web, low-level programming and so on. The most popular and relatively easy industries are development for web, mobile and desktop clients. One language may be suitable for each direction and another may not be suitable at all. That is, when choosing a programming language, it is also worth starting from this factor.

In any case, learn web technologies. These are the HTML markup language, CSS styles and which will make your page dynamic. The next step is to learn a server-side language (Python, PHP, Ruby, and more) and web frameworks that are suitable for it. Explore databases: almost every programmer job lists this.

How to get initial experience

Without experience, you won't get a job. Without a job, you won't get experience. Vicious circle of real life. But don't worry, we'll get out of it.

First, don't wait until you've read all the books in your chosen programming language. Start writing your first lines of code after the second chapter of the book. Complete all tasks from books, reprint examples, understand them. Complicate examples and tasks from books with your own ideas. Create your own tasks for the material covered. Solve these problems.

Second, you need to find your first projects. This is probably the most difficult option, but working. You will have to look for orders yourself, fulfill them, bother with payment. For a beginner, this is daunting, but then all other options will seem like a trifling matter. Completed projects can be recorded in experience and shown to your future employer. Real projects are a big plus on your resume.

If you know English, register better on English-speaking exchanges. The market is bigger. If you don't know English, learn it. In the meantime, Russian-language freelance exchanges are available to you. Look for small projects that are at or above your level of knowledge. Apply for a couple dozen of these jobs. And get ready to get a lot of rejection. But if one or two applications work, you will have a chance to get real experience.

Another good option for getting real experience is open source. Such projects always need new people, even beginners. You can search for bugs in the project or look in the bug tracker and suggest methods for solving them. Finding such projects is easy on GitHub or . Feel free to ask questions there.

The fourth option for gaining experience is to help familiar programmers. Ask them to give you small and easy tasks. If something does not work out, you will always have someone to turn to. And at the same time you will participate in a real project.

The last way is through your own projects, various hackathons or work in a co-working space. It is difficult to start your own projects, it is better to look for acquaintances or friends.

Why Choose Python

Let's talk a little more about the choice of the first programming language. The first language should be simple and popular in the market. Such a language is Python. I strongly advise you to choose it as your first programming language.

The Python code is readable. You don't even need to be a programmer to understand in general terms what's going on in a program. Due to the simple syntax of Python, it will take you less time to write a program than, for example, in Java. A huge database of libraries that will save you a lot of effort, nerves and time. Python is a high level language. This means that you do not need to think much about memory cells and what to place there. Python is a general purpose language. And it's so simple that even kids can learn it.

In fairness, it is worth mentioning other programming languages. Java Might be a good choice for a beginner. This language is more popular than Python, but also a bit more complicated. But development tools are much better developed. One has only to compare Eclipse and IDLE. After Java, it will be easier for you to move on to working with low-level programming languages.

PHP is another very popular language. And I think it's even easier than Python. It is very easy to find a mentor or a solution to a problem on the forum. This is because there are a huge number of PHP programmers of various levels in the world. There is no normal import in PHP, there are many options for solving the same task. And that makes learning difficult. And PHP is sharpened exclusively for the web.

Languages C and C# very difficult for a beginner. ruby - a good choice as a second language, but not as a first. JavaScript- a very simple language, but it will not teach you anything good. And the task of the first programming language is still to teach you something right, to set some kind of logic.

Is English Important

Important! Do not know? Teach. Do you know? Improve. Learn to read, write, listen and speak English. Focus on technical literature. Listen to English-language podcasts. Read English-language textbooks on programming.

What you need to know, besides the programming language

Of course, apart from the programming language and English, you need to know something else. But what - depends on the direction that you choose. A web programmer must know HTML, CSS, JavaScript. A desktop programmer teaches operating system APIs and various frameworks. A mobile app developer learns Android, iOS or Windows Phone frameworks.

Everyone needs to learn algorithms. Try taking a course on Coursera or find a book on algorithms that suits you. In addition, you need to know one of the databases, programming patterns, data structures. It's also worth getting to know the code repositories. At least with one. Knowledge of version control systems is required. Choose Git, it's the most popular. You need to know the tools you are working with, the operating system, and the development environment. And the main skill of a programmer is to be able to google. You won't live without it.

Last steps

You need to prepare a resume. Not just a resume, but. You should not write there, but you also do not need to be silent about your skills. After you are invited for an interview, you must prepare for it. Go through the material that is listed on your resume. You must be confident in your knowledge. Review the projects you have worked on, remember the technologies you have used. And forward - to a bright future with a new profession of a programmer.

I hope that after reading this article, you will find your way, because this is what we will deal with now!

First, you need to decide what you most want to achieve - create your own website, write a game, or develop a personal finance database. Deciding on a goal is the first step on the way to a big business. By aiming for something specific, you will be much more comfortable riding the horse of knowledge. After all, the world of programming is a very flexible concept, so you should try to learn this world, staying on your own wave. In the future, if you need it, you can easily move on to other areas of activity, because the area from which you began to pave your way will certainly affect your entire life path.

If your dream is to create your own website, then you should familiarize yourself with web programming. And if you don't like programming as much as, say, modeling 3D objects, then lessons in this direction are always at your service. Nowadays, millions of terabytes are freely available useful information, lessons and even entire courses from various universities around the world. But quite recently, in order to be at the top of evolution, we had to study in higher educational institutions without fail, where valuable knowledge was only there. And now let's move on...

It should be noted that knowledge of such sciences as maths, and English, are optional, and you will quickly understand this once you start writing your first program. Of course, if you plan to work on big projects like GTAV , Cinema4D or Google.Maps , then it would be better to know such sciences. True, here experience will help you more, which will quickly form in your mind a huge amount of knowledge of the exact sciences. However, I will not hide, there are some areas of activity, such as, for example, neural networks, in which it is simply impossible to do without prior knowledge of mathematics. But not the web, games, programs, design and stuff like that. At least in the first couple, you don’t have to worry about it at all.

By the way, many people think that you need to learn programming languages, starting with the very first language that appeared and ending with the last one. That is, the construction of algorithms, outdated languages ​​like Pascal, Delphi and others. But this is optional. Although it can come in handy if you study them hard, sharpening logical knowledge that can then be used when building code in modern, more accessible languages ​​for a simple user. But you still need to start with the language that most of all relates to your favorite field, because this will help you quickly get used to it and start making real money in this business. And a thorough study of the basics can simply scare you. In addition, when you have at least a little command of the code, the theory will quickly become understandable and accessible, rather than vice versa.

My first language was C++ itself. Before that, I didn’t know anything, and, believe my experience, over time everything fell into place. Later I entered the university. There we taught everything from the very basics, but I didn’t really see the point in this.

Now let's look at each area separately. Let's start with web programming...

Web programming

This area of ​​activity is one of the simplest and most affordable. Literally two months of training for a few hours a day is enough to turn from a complete beginner into a web craft pro. Yes, and making money in this business is not difficult, since freelance in this direction is the sea and the mountains.

To become a web programmer, you need to know such programming and markup languages ​​as, (and with it libraries, AngularJS and many others). In addition, you need to be able to write website functionality that can be written in . You also need to be able to work with databases and SQL language. To link the site-database, you can study. And the last thing that will add a couple of skill points to you is . It allows you to make some changes on the site, for example, send data to the database without reloading the site itself.

Yes, there is a lot to learn. But this is just basic knowledge, without which this craft simply cannot be done. Therefore, if this field of activity attracts you, raise your eyes a little higher and start studying all of the above.

Self-developed game development

This area of ​​knowledge is one of the most complex, incredibly interesting, difficult to reach and cosmically gambling fields of activity. Once you start, it will be hard to stop. Here it is both difficult and interesting at the same time, so the complexity over time is compensated by interest. However, if you create a game on ready-made engines, then there will be no difficulties on the horizon. And experimenting with what you create is a completely separate issue.

It is important to understand that games can be made both with the help of various engines, and by yourself. The difference is that the independent development of the necessary tools for creating a future game requires a huge amount of patience, since this is really a very difficult task.

For example, to develop an Android game, you will need to know the language and special libraries that are used to create Android games in Android Studio.

To create games on a PC or console, you will definitely need a language and all kinds of libraries that will help you create a game. For IOS development, you will need the Objective C or Swift language, and you will also need the XCode program.

Game development with engines

If you decide to get into game development with engines, then you are on the right track. Most games in our time are created using all kinds of game engines, of which such giants as Cry Engine, Unreal Engine, Frostbite Engine, Dunia Engine, Source and so on can be noted.


Designer

In design, you need to be able to draw well in Photoshop and in 3D modeling programs like Cinema 4D. Two weeks of training is enough, experience will do the rest.

That's all. I tried to cover all the intricacies of each area of ​​programming and tell you exactly what areas of knowledge you need to master them. Complex topics like AI ( Artificial intelligence) I bypassed it, since such areas of knowledge are not for beginners, for whom this article was designed.

The economy and our whole life is becoming more and more digital every day, and the labor market requires more and more craftsmen to build websites and software products. The country needs programmers and developers, companies are ready to pay decent salaries to intelligent specialists and create the most comfortable conditions for their work, including flexible hours and the ability to work remotely.

Read my personal rating of the 10 best online courses for beginners learning the basics of web programming languages ​​from scratch to the first internships and initial employment in well-known Russian IT companies. They are available in Russian, including for schoolchildren and teenagers. Here are courses on the most popular languages ​​from HTML and CSS to 1C, PHP, Java, Python, Ruby and C#. Those who read the article to the end will receive links to free courses and programming intensives :)

1. Python for Web Developers by SkillFactory

Data Science, Machine Learning and artificial intelligence are the hottest technological trends of recent years. Those who want to become a programmer should first of all take a closer look at the development of a language such as Python, since it is most widely used in these areas.

SkillFactory, together with Igor Bosyagin, R&D programmer at Lamoda, will help you learn the basics of Python programming, the Django framework and develop your first applications in 6 months. You are waiting for a party with useful acquaintances, an exam at the end of the course, a certificate, as well as assistance with internships and employment. The course is accessible from anywhere in the world.

The cost of the course is from 33900 to 48900 depending on the date of the reservation of a place on the course and the number of available places. As a blog reader site, you can get a 10% discount by telling the manager the code word igaryoh after completing the application. Read the details about the program and sign up for the course at this link.

3. Profession web developer from GeekBrains

GeekBrains is an educational project that has become part of the Mail.ru Group ecosystem and trains personnel mainly for the needs of this IT giant, often by its own specialists. The profession of a web developer from scratch is given here through webinars for 10 months at almost 8 thousand rubles a month.

This is the most expensive option, but along with the profession, free English and database courses come as a bonus. If you are interested in working for Mail.ru Group or its partners, then enroll in GeekBrains Online University .

Format: webinars + homework reviews.

Duration: 10 months.

Price: 7997 rubles per month.

4. Profession web developer from Netology

A web developer is the most demanded and relevant profession that requires mastering different tools. Internet universities give this profession for 8-12 months. Teachers - experienced practitioners from well-known IT companies provide skills that students work out on real projects. As a result, graduates receive skills, experience, diplomas, portfolio projects and possible employment in partner companies.

In Netology, this specialization is called a “full-stack developer”. This means that a graduate of this course will be able to create a site or web application from start to finish, which is called "turnkey". You can register for the program.

Format

Duration A: 8 months.

Price

Read also:

5. Profession web developer from Skillbox

In Skillbox, training in a similar specialty lasts 12 months, but can be cheaper. Here, instead of live webinars, you watch recordings of video lectures, but at any convenient time. Details and registration at this link.

Format: video lectures + video analysis of homework.

Duration: 12 months.

Price: 39,000 - 50,000 rubles or annual installment for 3900 r. per month.

6. Profession Frontend developer from Netology

Frontend developer focuses on development appearance site and its interactive elements and practically does not deal with the server side (everything that is "under the hood"). Training for a "frontender" in Netology lasts 8 months. Details about the specialization, training program, as well as registration at this link.

Format: webinars + Feedback for housework.

Duration A: 8 months.

Price: 48 900 - 62 900 rubles. or annual installment for 5 240 rubles. per month.

7. Profession Frontend Developer by GeekBrains

In 7 months, you can become a front-ender at GeekBrains. The cost will be about the same as in Netology. But on the other hand, the installment plan is for 7, not 12 months. Details and registration.

Format: webinars + homework reviews.

Duration: Seven months.

Price: 7 141 p. per month.

8. PHP developer from scratch to PRO by Skillbox

PHP developers do most of the work under the hood of most modern sites, including the site you are currently reading. In Skillbox, this area is taught mainly by specialists from QSOFT, the leading web integrator in Russia. They teach this for a whole year, but at a relatively affordable cost. You can sign up for the course using this link.

Format: video lectures + video analysis of homework.

Duration: 12 months.

Price: 29,000 - 50,000 rubles or annual installment 2 900 rub. per month.

In GeekBrains, they are ready to teach the same direction in just six months, but the cost can be more expensive than in Skillbox. Details and registration. In Netology, the course on PHP and databases lasts 2 months and costs 22,00 - 25,000 rubles, but this information is for those who carefully read the article. Link here.

Read also:

9. Python developer from Netology

A more in-depth Python program at Netology - it lasts almost a year and includes modules in HTML / CSS, JavaScript and Django. Details.

Format: webinars + homework feedback.

Duration: 11 months.

Price: 48 900 - 62 900 rubles. or annual installment for 5 240 rubles. per month.

10. Mobile developer from scratch by Skillbox

People are increasingly using mobile devices, which is why the front of mobile development work and the demand for mobile application developers are growing. Skillbox offers an extensive year-long mobile Java/iOs/Android development course for beginners from scratch. Read the details about it and register on this one, Java programmer. And we will add the Java developer course from Skillbox to the same company.

And finally, what is left for dessert is a freebie. It is clear that not everyone has the means to study for money, but the opportunity to study for free quite officially is also possible, and this is point 17.

Free programming courses

Many of today's self-taught developers began their education by learning web programming, specifically Hyper Text Markup Language (HTML) and Cascading Style Sheet (CSS). Netology gives you the opportunity to learn these topics for free for two weeks under the guidance of experienced developers from well-known IT companies. Register using this link if you are just starting your way in programming.

Other paid courses for programmers from Netology at this link, and from GeekBrains here at this one.

P.S.: I strongly advise everyone who is looking for programming courses in Moscow, St. Petersburg, Yekaterinburg, Minsk, Novosibirsk, Nizhny Novgorod, Krasnodar and other cities of Russia and the CIS to opt for online courses, since it is online technologies that allow you to create the highest quality educational products at an affordable price (due to the lack of rental costs), as well as to connect the best teachers and employers with students and future employees from the regions furthest from the capitals. In addition, the skill of online learning is also useful for remote learning in foreign schools.

I write about development, education, startups, content marketing, business services.

Psubscribe me on Instagram, beforeadd