How to become a good programmer?

Hello,
I have started the Rust-Lang with "Beginning Rust: Get Started with Rust 2021 Edition" book and I want to know what other books should I read to become a good programmer? I found "Think Like a Programmer: An Introduction to Creative Problem Solving" book.
What is the formula to become a good programmer?

Please share your experiences briefly.

Thank you.

1 Like

I would recommend that you spend time actually programming. Books can help somewhat, but they are probably not going to be the deciding factor.

19 Likes

Build shit. Learn from your mistakes. Then build more shit while avoiding past mistakes. Repeat.

32 Likes

"Practice makes perfect" as they used to say. You can read all you like but finding neat solutions to your problems takes writing code and trying it out.

Rust is great in that respect as one gets very helpful errors out of the compiler. Never thought I'd find myself having such interesting and helpful conversations with a compiler.

Don't forget that being a good programmer of anything is as much, or more, about understanding the problem you are trying to solve, and how to solve it, as much as it's about the programming language you are using.

6 Likes

Becoming good at anything basically requires two things: practice (learning from your own experience) and learning from other people's experience.

Practice: Not sure who said it, but "the secret of success is constancy of purpose”, and it's true. Write some code every day. It doesn't have to be much, but keep at it. Nobody is a good programmer when they first start out, so don't put too much pressure on yourself. Make it fun, set yourself little challenges like writing a small program to solve some problem in your life, etc. Only you know what motivates yourself, so you'll have to design your own learning experience.

Learn from others: The great thing about learning software development is that there is so much free, high-quality and legally available open-source material on the web for you to look at, pick apart and learn from. The same isn't true for many other fields like medicine or nuclear engineering. Think of projects you find interesting and look at what others have done already on GitHub or other code repositories.

Since you're learning Rust, you should make sure you've read the Rust book. For programming in general, I like the How to Think Like a Computer Scientist books, which are available for several programming languages (not Rust, unfortunately). You should be able to find free versions online.

9 Likes

Ha! Typically I have not gotten past the "build shit stage". Most often there is no time to learn from the mistakes on a particular project and go back and rebuild it fixing mistakes.

Of course one learns something useful for the next projects(s). If it is applicable. And which is likely written in a different language anyway.

Luckily with Rust the shit that one can get past the compiler tends to work reliably. :slight_smile:

1 Like

As Linus Torvalds showcased once in a TED talk, have taste.

3 Likes

I personally learn best by hopping into a project, set what you want to do, and learn what to do to do what you want it to do. Stack Overflow is the best teacher.

To become good from there, it's about motivation and the drive to program. Make something you want to make, not something you're forced to make. Remember, you'll make something amazing, and you can do it!

3 Likes

If you have a taste of some food or drink, you put a small amount in your mouth to try it.

I would say, be curious about the machine and the systems built on top of it and how they work. Not everything in programming is about using a programming language. This was always the basis for how I interviewed people to work with. When you think you understand things, question that assumption and dig further. Which leads me to another point which is: think critically, especially about yourself. Just because you've always done things a certain way, does that mean it's right for every situation?

For example, when you click a link, how exactly does your computer load a webpage and display it to you? We could talk about the DNS, TCP/IP, HTTP, and TLS networking protocols, but to go even further, how does your mouse click translate to an event in your browser process? What even is a process? How does your browser send data over the network using one of the above protocols? It calls a system function, but how does the operating system send those bits to the network card? How does it receive information back from the network and get that to the browser process? Hint: the network card may send the CPU an interrupt, but then what happens? What if the CPU was busy doing something else?

1 Like

By "taste", he meant having an intuitively professional style in code and instinctively knowing what's the right way to do things; all of which comes from how deep one person goes into mastering a programming language.

But you better try to put a piece of your laptop's hard drive in your mouth. It might help.

2 Likes

The single biggest thing you can do to get better is to write programs that solve problems you can see.

Next biggest thing is to work in an environment where your code gets reviewed, and to treat the reviews as a learning process - look at the Call for Participation in TWiR and when you see something interesting, talk to the project that put the issue there and see if they'd be willing to mentor you in handling that issue. Be honest about where you are today in your journey; it's going to be a bad experience for you if they're assuming that you're an experienced Rustacean, but you're not yet feeling confident about the basics of the language.

Treat the books as a resource for when you can't work out how to do something, and spend your time doing things.

3 Likes

Have / get domain knowledge for the things you do as one of the first things.

If you don't know your domain well, you have two difficult things to do: Find out how to solve a problem and find out how to formulate it for the compiler. E. g. in audio processing, if you know the math how filters are done, you don't have to reinvent it (and build a triangle instead of a wheel). You "just" have to find a good implementation for it.

I have been trying to become a programmer with rust for the last 2 years. I barely had any experience with languages. No knowledge of data structures or algorithms or state machines.
I read books, watch videos and read more books, do courses and exercises. And I see a pattern that is haunting me doesn't matter if I try to learn a programming language or play a piano:
You need to grow a muscle.
Reading material and understanding it is a very different thing than facing a problem and understanding how to solve it.
You can read all the theory how to windsurf(or insert your analogy), but at some point you will actually have to stand up on the board and do it.
I am sure you will face very different problems than the ones will be going through in the books.

I understand you like everyone else do not have the commodity of learning inefficiently anymore, but the secret formula to becoming a good programmer or anything else is:

  • accept it will take long
  • make it fun
  • read books or see how others do it
  • create little projects and see if you can do them. If you can't, identify the knowledge you're missing. Read, try again.
1 Like

Hi, i am happy to see you have the interest for being a better programmer, if you are asking about tactical good programmer learning how the others writes programs its a good way, but personally the best programmers are the best friends, they take the time to study the others works, they says the truth, they write for others, they are good friends.

If you ever run out of ideas for programming, you can try AoC (Advent of Code) or Leetcode/Exercism (and sites like it) to challenge yourself.

@hack3rcon How To Become A Hacker

experience!

a good programmer or mechanic or doctor doesn't become one by reading books. one needs experience above all

1 Like

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.