I’ve been writing code for over 20 years, and I’ve taught about six introductory programming classes so far, totaling over 1,000 hours. Here, in no particular order, are some of the tips I’ve told my students at least once.

Review images

Welcome to programming!

1. Programming is really hard

No matter how good you are at programming, the only thing that slows down development is the ability to learn and solve problems. And the better you get at programming, the more obvious this might be. This is a very attractive trait — you never get tired of programming. If you’re bored, you’re doing it wrong, and you should review the code you’re rewriting.

2. Programming can also be one of the most frustrating

The general steps of programming are: try to solve the problem, get frustrated, try harder, review, have an Epiphany and finally get the program running. It’s perfectly normal to feel depressed, and it never completely goes away. (The same is true when you are more competent and you face more difficult problems). But that feeling of frustration will make solving the problem all the more satisfying. So you need to get used to working with that frustration.

3. No matter how complex a problem is, there is always a solution

As your programming skills improve, you’ll become better at and more confident in keeping yourself calm and not getting frustrated. This will ease the frustration and allow you to tackle more difficult and complex problems. (If the question is too easy, you might even get bored!)

4. Programming isn’t something everyone can do

When we were kids, we couldn’t do anything well, but we didn’t realize it. However, as adults, we rarely have the opportunity to screw something up. Embrace the feeling. That’s perfectly normal, because what you’re doing, not everyone is capable of doing.

5. Know that after 10 hours of practice, it will be completely different than your first hour of programming

Again, after you’ve done 100 hours of practice, things are even more different. There was a guy who wrote on his blog that after 10,000 hours of golf practice, he experienced a qualitative improvement. The same goes for programming.

6. If the programmer is Harry the Wizard, programming is basic magic

We study hard, delving into “textbook knowledge” (computer + Internet), learning “word spelling” (program). Wizards can also teach other wizards how to use their magic. We can make that happen on Earth, too, to create amazing devices that everyone can use. (Like the Internet and mobile phones). Even without our magic, these devices can do some impossible things.

7. Use the Internet

In your first year of learning to program, every problem you encounter is one that 100 other people have already encountered. The solution has been documented online. The sooner you learn to effectively use Google for help, the happier you’ll be. Tip: Never copy code directly from the web if you don’t understand how it works.

8. Good at summing up experience and skills

As programmers, we carry a toolbox at all times. Tools include all of our problem-solving techniques. The first objects you learn (variables, for loops, etc.) are like our screwdrivers and hammers. You’ll use them every day of your programming career. As you become more proficient, you will begin to learn how to use more advanced tools that may not be used very often, but are very effective at solving specific problems. (such as trees in data structures, A* algorithms, ValGrind, debuggers, etc.) Most areas of development (game development, Web development, databases) also have their own domain-specific problems and solutions. As a result, any problem you solve will be much easier the next time you encounter it.

9. Every written program is coded step by step

You can read, modify, and test almost any project on your computer, including most other people’s projects. For a computer, this is basically a superpower.

10. Practice a lot

The best way to get ahead in development is to write lots of programs and keep doing stuff. As a teacher, I will help wherever I can. But once you have enough knowledge, you’ll be able to understand anything I tell you without taking too much time. So stick with the program. As a wise man once told me, “Success is inevitable with patience.”

11. Read good code

Too many programmers are smarter than us. They write a lot of code that you can read if you need to. The code is most likely on Github.

12. It is said that your second programming language will be the most difficult

Your first programming language will shape the way you think about programs (seriously!). When learning a second language you will have to fall into the same mindset. (A programming language that doesn’t affect the way the brain thinks in the slightest isn’t worth learning.) But when you’re done with your second language, you’ll be able to pick up other languages quickly. Now I can become proficient in any given imperative language in a week.

13. There is no such thing as “the best Language”

Some languages and tools are just better than others at solving specific problems. When learning a new language, don’t try to bring your old mindset into the new system. Accordingly, we should learn how to program more “authentically” in the new language.

14. Relax and keep it simple

Programming is a huge collection of Lego bricks, full of interesting problems that need to be solved. Taking the time to write interesting programs in order to understand how it works is more fun than giving you any kind of appointment.

15. The best programmers always try programming themselves outside of work. If you really like it and are good at it, you will never be unemployed.

16. When you get stuck, write down your program on paper. I’m serious. It’s amazing. It’s standard practice in programming competitions. (THE reason I think this works is that when you don’t have to worry about grammar, you have more energy to think about the nature of the problem and how to solve it).

I’ve given other advice from time to time. But like most advice, if something is really important to you, trust that you will take the initiative to find out on your own.