Learning how to program from scratch is a complex process. Especially if you study online on your own: you try to find the best methods; you spend time and effort finding the right information; you listen, read, or watch; you try to write your first programs; you make mistakes, but you don't know where exactly; you feel you don't understand anything; you get stuck... 90% of attempts end before they really start. After all this effort, the person often provides a negative self-diagnosis ("this isn't my thing") and stops learning to program.

The causes?

  • Not enough practice: programmers shouldn't dig into the theory at first. First and foremost, programmers program. Someone learning this skill set must stubbornly focus on practice, practice, practice! "I'll figure out what's what, and then I'll do the task"—that's not what programming is about!

  • Due to lack of experience, a beginner can't distinguish important information from trivial matters. He often get lost in the details, or digs into difficult topics because some smart person on the Internet said, "if you can't write the code for sorting algorithms, you can't be a programmer". Then he gets lost in the difficult stuff and... it's over.

  • No systematic approach: trying to get information from all kinds of sources, endlessly going in circles.

  • Trying to understand everything immediately and completely before starting to program.

  • Weak effort: especially when people don't try to dig in and complete a task by themselves more than once, and instead look for someone else's solution on the Internet. In reality, "copying" can be useful. Learning the basics of programming often includes analyzing someone else's code. But it's the analysis that is useful, and only after the person has attempted to do the task on his own several times.
And one more point:
  • Loss of motivation. Except this isn't a cause—it's a consequence of everything listed above. And this is where failure happens. The person decides that all is lost, he's wasted his time, and he won't get anything from it. So it isn't worth trying.

How do you make progress in learning how to program?

  1. Find a primary source of information. It should be detailed, well-structured, filled with only the most vital information, and not boring (that's important!). Then follow this source.

  2. Know how to find additional sources of information, and use them as needed. When doing this, don't spread yourself thin.

  3. Write code constantly: solve lots of exercises and be able to check the accuracy of your solutions.

  4. Work at it regularly—don't stop your studies for long periods.

  5. Don't try to cover everything all at once. Move forward in iterations, gradually increasing the complexity.

  6. Learn to read other people's code.

  7. Learn how to find answers to questions on the Internet, but don't abuse it.

  8. Discuss your future happiness with others: it's preferable to have at least one other student of programming nearby; learning online without interacting with others is much less effective.

  9. Talk to more experienced programmers.

  10. Don't give up!
"Ha, that's easily said!" you say. And add, "Thanks, Cap!" The simplest advice is usually the hardest to implement. But... you're reading this, and you've already found CodeGym. And CodeGym contains an identically-named course that was built specifically on this philosophy! Let's convince ourselves.

CodeGym is a non-standard approach to learning

  • CodeGym is a well-structured course on the Java programming language. It is made up of short lessons presented as entertaining conversations, interspersed with lots of practical exercises. You complete the course as a character that you need to "level up" from Level 0 to Level 40, like in an RPG. Completing tasks earns you points that you can spend to unlock the next lesson.

    But in reality, you're leveling up your own programming abilities, not your character. The course contains all of the essential information about Java Core (everything a future junior Java developer needs to know), plus a little more. At this point, you can check off the first item in the above list.

  • CodeGym has special lessons in which course developers recommend specific books, videos, and other resources. Additionally, website staff and advanced students often write articles with recommendations designed to make it easier for you to understand complex topics. That takes care of item number 2.
  • To become a programmer, you need to program. It's a simple rule, and sounds extremely logical. Still, it's surprising how often people forget that learning to be a programmer requires, above all, practice writing code, and everything else is secondary.

    CodeGym's creators have understood this for a long time, so practice is the very foundation of the course. It has 1200 tasks! This is extremely valuable programming experience that every aspiring software developer lacks.

    The tasks themselves are small. But they still need to be done and you need to know that your solution is correct.

    To this end, CodeGym has an instant and automatic solution verification system. You do a task, click one button, and immediately get the result (whether your solution is right or wrong). Moreover, our smart recommendation system will tell you what you did wrong (if you did something wrong, of course).

    In addition to task conditions, you'll receive the task requirements. Requirements are more detailed conditions that provide a step-by-step outline of exactly what your future program should do.

    Check off the third item.

  • CodeGym exercises
    • Some of the exercises cover the theoretical material from the preceding lesson.
    • Some are designed to review theory that has already been covered (in previous levels).
    • A third type of exercise is "challenge tasks", which are based on material from the following one, two, or three levels. Yep, you didn't think we would do that to you. We did it on purpose. Want to do a task now, but don't know how? Google it! This is an extremely useful skill for a programmer. But, if you want to progress in order, just postpone the task and return to it in a couple of levels when you reach the required theory. At this point, you can check off items 5 and 7.
    • Bonus tasks. These are more difficult tasks for self-study and for developing your ability to think in terms of algorithms. Another check next to item 7!
    • Mini-projects. These tasks are divided into several sub-tasks. As you complete each of them in sequence, you end up creating relatively complex and large programs. For example, the game Sokoban or an online chat room. These tasks appear around the middle of the course.
    • Code entry is a task for beginners. Sometimes an aspiring programmer should just dig his hands in and feel the code. To do this, simply "copy" an example.
    • Analyze someone else's code and find bugs. Well, you understand. We have these tasks too, so you can check off item number 6.
    • Videos. Sometimes it's useful to switch up what you're doing. On CodeGym, we do this by watching IT videos.
  • Help with tasks

    As we mentioned above, your experience learning how to programming online shouldn't resemble floating alone on a raft in the ocean. You need to interact with others. Above all, CodeGym has a "Help" section for this. If you've been stuck on a task from the course for a long time or can't understand a difficult topic, ask a question in a specific section. A student, programmer, or website staff member will certainly help you. Additionally, we have a "Groups" section where you can talk to other students taking the course. What's more, when you feel ready, it will be very valuable for you to go to the "help" section and help someone else with their studies. That means you'll have to understand someone else's code. Check off items 8 and 9 plus number 6 again!

  • A lot of motivational lessons are woven into CodeGym. Additionally, our graduates who are already working as programmers sometimes send us their success stories. Judging by the comments made under those stories, they really motivate people to not give up learning. Now you can check off item 10.
So, we were able to check off all of the items (sometimes even several times). "That's not true. You didn't check off the fourth item," an attentive reader will notice. And so it is! However, CodeGym's creators have made every effort to make it so you can check off this item. The choice is yours! And... good luck in the challenging task of learning how to program!