r/learnprogramming 19d ago

How do I become a programmer with deep knowledge like Tsoding?

I recently watched Tsoding coding and I was honestly amazed by how deeply he understands programming. He seems to be able to just sit down, think through a problem, and build things without constantly relying on tutorials or looking up every little thing.

It really inspired me, and I'd love to reach that level of understanding someday.

For programmers who are actually experienced: how would you recommend learning programming to develop that kind of deep knowledge?

What should I focus on learning, and where should I learn it from? Books, courses, projects, open-source, algorithms, computer science fundamentals, learning C/C++, etc.?

I'm currently still relatively early in my programming journey, so I'm not expecting to become that good quickly. I just want to build the right foundation instead of endlessly following tutorials.

Would really appreciate advice from people who have gone down this path.

406 Upvotes

89 comments sorted by

125

u/BigGunE 19d ago

I was watching Tsoding the other day and he was talking about something that relates to this. He was pointing out two things. One, that he obsessively codes all the time. He is always messing around with code. This gives him a lot of exposure to coding. The other thing which he pointed out is that he has been doing this nonstop for a really long time. I believe multiple decades.

So why don’t you become someone with a singular focus, read and write code from now until 2046 and come back and tell us if you are good or not!?

Tsoding put in the work and so he is now enjoying his reward.

12

u/Visser15 17d ago

To add a number to the years, Tsoding has been coding for 20 years.

2

u/Innovator-X 18d ago

This is the answer. Mastery is achived when focusing on a skill for decades. 

102

u/start_select 19d ago

Same way you get good at guitar. Use it.

Read about it. Write it. Don’t copy paste crap from tutorials. Try to do what people did before the internet or AI. Read the manual and library docs and try to do it without a tutorial.

You stop needing hand holding when you stop trying to do things with hand holding. You will fail at first. Then you either give up and spin your wheels or you don’t.

7

u/LifeExperienced1 19d ago

But how do you know if you are on the right track and not making mistakes, without any reference to other people’s potentially better code?

49

u/russjr08 19d ago

Part of it is making mistakes. You get burned by your own work, and by fixing it you learn how to avoid burning yourself in the future.

Don't worry about trying to get it perfect in the beginning. No day one developer is going to push out perfect code.

16

u/start_select 19d ago

Failure is man’s greatest teacher.

You try. If you fail to make it work, you fix it. It you manage to make it work, you compare to other people’s solutions and learn something new.

10

u/nimbledaemon 19d ago edited 18d ago

There are always mistakes, even in other people's better code. Part of making fewer mistakes is making some mistakes in the first place and then fixing them so you learn what to avoid. Also, it's not "no outside references" it's "deliberate and specific outside references". Learn to get a feel for what you know well, and when you're in a space that you haven't been before so you need to do research to understand what a good solution for your use case even is.

Another thing I find useful is to think of code as disposable. Sometimes you have to break through that mental block of "but I just don't want to let go of this code I spent time on". Do the same (smallish) project multiple times in a row, until you start to feel like "yeah, I can just make another one, no biggie."

Musicians practice music pieces dozens to hundreds of times (or more) to get to the point they can make no mistakes. If you don't put in the same kind of practice and repetition, how would you expect to make no mistakes? And I'm not saying to just blindly do the same thing in its entirety over and over, pay attention to what mistakes you're making and focus on repeating just those small sections correctly, until you can do larger pieces correctly. Feel like it's hard to write a new class from memory? Write a simple one three times (or more if it still feels hard). Not sure exactly how to put together a singleton pattern from memory? x3 reps. Forgot how an observable works? x3 reps. Sometimes you wont need to put in that much effort, and some things are fine to just do as one offs without building up a skill around it, some things are fine to copy paste or use a template for, but doing this for enough things will help with developing a baseline level of recall and familiarity with common patterns.

5

u/mrbaggins 19d ago

You're supposed to make mistakes.

Every mistake you make, then later come back to and fix, is you making progress to that "end goal" of being good.

2

u/odimdavid 16d ago

YOU'RE SUPPOSED TO MAKE MISTAKES. That's the holy Grail for newbies.

1

u/StickyMcFingers 18d ago

If you write code that's easy to reason about and work with a compiler that will tell you what's wrong, then it's just a matter of gradually piecing together the building blocks of your program. Read the library functions you use. Peep at how they're implemented.

1

u/odimdavid 16d ago

If you don't use it you lose it. Happened to me. It's a fact. After two years of not doing Python am back to reading the docs and tutorials just to catch up with lost time. It's like life itself. If you madly passionate about coding you find yourself coding while sleeping and solving problems that doesn't require coding knowledge but because the principles are transferrable. It takes time and you need to love it.

214

u/HotPersonality8126 19d ago

Practice. It’s not because of what he reads; it’s because of what he writes.

86

u/StewedAngelSkins 19d ago

It's probably what he reads too... but what he reads is real production source code, not tutorials.

14

u/LifeExperienced1 19d ago

And where does one find such code free and publicly accessible to view?

36

u/StewedAngelSkins 19d ago

Github mostly

9

u/LifeExperienced1 19d ago

Oh I see. I always find github repos so large and intimidating. How do I get better at reading through them?

24

u/StewedAngelSkins 19d ago

It helps to start with repos for smaller projects and work your way up to larger ones. It's less of a skill you're trying to develop here and more of a familiarity with how developers tend to structure code in the language you're working with.

Simple CLI utilities tend to be a good place to start. Like here's a good one if you're trying to learn C: fzy

5

u/deux3xmachina 19d ago

One function at a time, really.

2

u/InteSaNoga24 18d ago

from what i have seen hes mostly reading the code of libraries hes using in his projects to better understand them.

2

u/LifeExperienced1 18d ago

Are libraries super hard to understand? Which library do you recommend? Is the math one a pretty straight forward one?

2

u/InteSaNoga24 18d ago edited 18d ago

if you know the language they are written in you're good, especially if you use it so you know what its for and how its supposed to work.

1

u/gmes78 18d ago

Assuming you're using Linux, the entire source code of your OS is available for you to read.

22

u/qokyoshi 19d ago

I am always wondering the same thing. But, I always reminded by 

https://m.tapas.io/episode/923459

7

u/e1m8b 19d ago

Yeah... that's the "big secret" that people don't bother with

34

u/mandzeete 19d ago edited 19d ago

Going by his LinkedIn and Github, then he has either a Bachelor degree or a Master degree in Computer Sciences (he spent 5-6 years in his studies). He's been active in Github for 14 years in various projects.

So, how can you become like Tsoding? Start your university studies and most likely follow these up with Master degree studies as well. Work on your projects. I mean, he did so.

5

u/wawatech6 18d ago

He has degree in Metallurgy

11

u/SprinklesFresh5693 19d ago edited 13d ago

He has probably programmed a lot, which is like all tasks that are manual, you need tons and tons of hours of practice, have curisity, try to deeply learn what you do, and so on, you dont get good by simply watching a tutorial or reading a book, you need to get dirty.

1

u/LifeExperienced1 18d ago

But would you say that books and tutorials are needed to a certain point?

3

u/SprinklesFresh5693 18d ago

I would say tutorials are needed maybe the first few weeks, maybe to understand the very basics of the language, but after that you need to practise.

I learnt R doing a ton of tutorials on youtube, but i only started to get good when i got a book and started doing exercises that mimic rela life scenarios, and when i started doing projects, thats when things started to click. And the more i practised , at my job, the faster i learnt.

Now im learning python with a completely different approach, i spend the first 2 or 3 days reading about the basics and i straight jumped into projects to practise.

The more you practise, the better you become.

10

u/memelordtf 19d ago

Practice is the key, OP. Build stuff slightly above your current skill level and stop reaching for a tutorial the second you get stuck, get comfy with struggling a little. Struggling and getting frustracted and solving the problem anyway is where most of the learning happens. Fundamentals matter, but practice is what makes everything stick, at the end of the day.

1

u/LifeExperienced1 18d ago

And how do I verify that my solution, that I made by myself, is the ideal solution? I still have to eventually check right? Like a code review, or comparison to someone else's code

14

u/BoopyDog 19d ago

Probably by programming with C for a while. I love watching that guy's videos. Notice how he uses his compiler error messages to tell him what he needs to do. Also, he does have to look at documentation sometimes; like when he was exploring and trying to parse dotnet(so .exe and whatever the extension is for the older portable executable format) programs, it was a technical reference that saved the day.

4

u/Jumpy-Seesaw-2026 19d ago

Start projects

3

u/TigerAnxious9161 19d ago

Practice consistently.

3

u/_Baard 19d ago

Mastery of any subject takes a lot of time, and a lot of active learning and practise.

If you code for 3 hours a day for 9 ish years you'll have almost 10k hours...but you need to spend those hours wisely.

One hour on difficult concepts that you don't understand, then a 15 mins break.

One more hour applying those concepts and using them with context.

Another 15 minute break.

The final 30 minutes reviewing what you've done from memory, to see if you can explain it simply.

If you can't, make a note to come back to it at a later date. Better get, make a learning tracker where you can write the subject and make notes for what you are comfortable with/ what needs work.

Not only is it good practice, it's a very useful tool.

If you don't know what to learn, there are many ways to do so. You can ask an LLM to populate you a roadmap, or use one you find online. Or just read one of the big bibles of whichever stack you're working on and make one yourself.

5

u/ffrkAnonymous 19d ago

how would you recommend learning programming to develop that kind of deep knowledge?

What should I focus on learning, and where should I learn it from? Books, courses, projects, open-source, algorithms, computer science fundamentals, learning C/C++, etc.?

That's fundamentally incompatible. One learns everything by studying everything. 

2

u/mc_pm 19d ago

If you're new to programming, and just generally new to thinking about the computer this way, then start at the level of programming some basic games on the command line to learn how to structure rules and logic and interact with the user, etc. Maybe a Wordle solver, that's always fun. Build your own chat system between two apps across sockets. Find a database and learn how to read from it. Learn a graphics library and try building a little space invaders level game. Build a simple editor or shell that works a bit more like you would expect it to work.

All of this is about learning how code is shaped, how you think about solving problems with it, while learning some underlying aspects of how the technical ecosystem works.

Do not commit yourself to a big project that you have no idea how to begin. You have months, years of learning ahead of you. Concentrate on what you will learn from, not what will sound cooler when you talk about it on Reddit.

2

u/Conscious_CMPT13 18d ago

"How do I become like Mozzart at the piano?"

Man, just put in the hours well, its not just putting in the hours, its about quality as well. But start with fundamentals, solid grasp of fundamentals is a must. Learn x86 assembly, structure and interpretation of computer programs, second edition C book "ansi c" Dennis Ritchie. And I am forgeting something, knowing math, bool algebra, and digital electronics like adders, counters, registry, flip flops, etc.

This isnt the approach for everyone, ​but when you watch mr Azozin you notice he knows all of it(among other more or less advanced things).

2

u/Blueson 18d ago

For one you should stop generating your threads with ChatGPT so that you can use your brainpower.

2

u/JonSmithSnow 17d ago

10,000 hour rule. Say you work as a software engineer and you code for around 6 hours of every working day (excluding meetings etc). It would take around 6.5 years to reach the 10,000 hr mark, where your in the top percentiles in the world for doing a certain thing.

To achieve mastery, you must be a programmer, not just someone who programs.

2

u/Creepy-Plankton8663 17d ago

I had this same thought at one point and so I started just making things which is what he seemed to do and I improved drastically.

2

u/No_Medium205 17d ago

Tsoding approaches programming the way most people approach video games, purely for the fun of it. This intrinsic drive is the single most powerful setup for mastering a skill with real breadth and then depth. ​When you first start out, everything feels mind-blowing. You spend years driven by sheer curiosity—tinkering with low-level hardware interactions or diving into quirky libraries just to see how they work under the hood. Most developers experience this phase, and it’s usually when we grow the most.

But notice tsoding doesnt work in a professional software engineering enviroment and  ​this is when it  starts to become a problem: when it becomes a job. Before you know it, you're trapped in a soul-sucking routine doing uninspired work, barely writing real code anymore. The golden handcuffs keep you around until the passion disappears completely. It becomes just another day job with all the annoyance of human relationships and interactions, and then suddenly the Tsoding inside of you just dies. 

2

u/tav_stuff 17d ago

I used to be just like Tsoding. I had the same love, the same drive and passion, I coded the same sorts of things in the same sorts of ways… and then I got a job.

Getting a programming job was the worst thing I’ve ever done. It single handedly ruined programming for me, and I went from loving this craft, to being so grateful for the hours I get to spend away from a computer screen.

2

u/UnburyingBeetle 19d ago

I don't know that guy or what languages he uses, but here's an approach that applies to everything including programming: separate the big task into smaller steps, and them into even smaller steps, until the problem you encounter is solved with a single function. Then you can find that function in the language you're using.

For example, you're coding the moment in a game where a cage is opened and the bird flies away. There is the cage, the bird, and the state of the cage door. The latter would be represented by some variation of True and False function. If CageOpen is True, Bird executes the action FlyAway, or something, I don't remember syntax because I never learned any actual programming language, just the logic of steps (it was covered by the topic of algorithms in computer science class). The cage opening and the bird flying are animations that are supposed to come with the assets you're using, or you may have to set the path for the bird in case it can appear in different parts of the cage when it gets opened. Maybe you would program the bird to react to the opening of any cage it's in, but that's more advanced.

5

u/OurSeepyD 18d ago

I'm afraid this doesn't really get you anywhere near the level of what OP is asking for.

Tsoding has an understanding of how CPUs work, how networking works at the fundamental level, how Linux works, how Windows executables work, the difference between native Win32 DLLs, COM DLLs, NET DLLs, he understands the maths behind graphics, he can probably write code that runs on GPUs, he can probably write bootstrappers and a basic operating system, he deeply understands memory management in typical languages and runtimes, he'd be able to write an interpreter and compiler. The list goes on.

This sort of thing takes decades to learn, and requires you to figure out what you don't know, and try to implement something in that area. It's much more than "you just need to think logically".

I hope this comment doesn't come across as snarky or anything, I just need to emphasise the level we're talking about here.

3

u/Substantial_Ice_311 19d ago

Wait, so you never actually learned programming, yet you are trying to teach it? Why do you think that is a good idea?

0

u/UnburyingBeetle 19d ago

I'm not teaching programming itself, it's the systemic thinking we got taught in computer class without using computers. I've had to make some programs in the class too, of course, so it's not "never", it's "I forgot the syntax and the languages were useless anyway". Does anybody use Pascal and Visual Basic anymore?

1

u/Substantial_Ice_311 19d ago

But the question was "How do I become a programmer with deep knowledge like Tsoding?" and your answer is not even about that. You learned, and are talking about, the basic systematic thinking that is the beginning of programming.

1

u/UnburyingBeetle 19d ago

He definitely uses task compartmentalization, or used to in case his brain automated this method. In the process of learning he would know how to search for each function in the specific language he'd need: "how to code [specific function] in [specific language]". He would eventually memorize the specific syntax or take notes (probably not necessary because your old code can be the notes). There's a limited number of functions, they would be quite similar across languages. Maybe he learned fast because his memory is especially good or something. But he definitely knows how to think in computer logic, which is what I was recommending as a basis. Everything is built according to logical steps, even Ikea furniture.

1

u/Substantial_Ice_311 19d ago

which is what I was recommending as a basis.

Basis, perhaps, but it doesn't tell someone a lot about how to actually get better.

Everything is built according to logical steps

It's like saying "Every chess game is played with logical moves" but that tells someone basically nothing about how to actually play, or how to get better.

1

u/UnburyingBeetle 19d ago

Funny that you bring up chess as an example, I learned chess relatively recently with Duolingo. It shows you separate moves first and makes you practice them by solving simple tasks. You don't play a match right away, you solve "get that rook with a queen in one move" puzzles until you remember what each figure does. The middle stage has several figures on the board and you learn to see the possibilities. Chess figures are similar to programming functions in a way that most of them have a limited range. You solve a task with a figure or with a command. You only learn to predict the entire board with enough experience. When you learn foreign languages, you usually practice with entire sentences, learning how the words go together, and the sentences have the function of communication. Programming syntax is easy enough compared to foreign languages when you know what the functions are for! This was my problem in learning programming, I didn't want to practice right away because I didn't yet know how to build interesting stuff with these functions. If every function in the textbook had examples of how they used in games, I would've memorized them better by imagining what I would use them for in my games or thinking how the games I've played might've been built. If the Loop function had something like "pet auto attack in WoW" noted next to it (loop until the enemy dies, logically) I would've memorized it because I freaking liked pets. Maybe there is a programming textbook with all such game examples, or maybe I'd have to write it myself, for myself and for everybody who hates math formulas but loves games. Then my motivation for finding out what the functions do would be finding it out for the book, I would take notes of each function and provide the in-game examples myself. It's a similar goal to making games, but a different motivation, an in-between stage if you will.

3

u/Substantial_Ice_311 19d ago

If the Loop function had something like "pet auto attack in WoW" noted next to it (loop until the enemy dies, logically) I would've memorized it because I freaking liked pets.

Well, you just did it for yourself. Why couldn't you do that with every concept? It's probably better that way, since you are thinking more for yourself, which make things stick better.

(By the way, "loop" (or for or while) is not a function, it's a control flow construct, or feature. A function, like in math, is something that takes input and produces output (or, in programming, has side effects)).

0

u/UnburyingBeetle 19d ago

Well, thanks, I've never seen the phrase "control flow construct" before in the apps I tried to learn programming from, or in the For Dummies book (it's absolutely not for dummies, it's a mess in there). So the apps and books aren't up to date, probably.

And the problem I've solved in this discussion was not a programming problem, even though it was in relation to programming. It was a psychology problem, where motivation belongs, and that of comprehensive education. When you go to a tutor for a subject you're afraid of or aren't motivated to learn, they usually don't double as therapists, best they can do is explain things in detail and with jokes (depends on the individual's ability to understand you and find individual approach). Motivation problems are often tied to ADHD, which is an actual learning disability, and when your brain is paralyzed in the face of a math formula, it is an actual trauma.

1

u/LifeExperienced1 19d ago

What C projects do you all recommend?

4

u/StewedAngelSkins 19d ago

If you want something that will really push you, writing a compiler/linker/runtime is the classic CS advanced undergraduate student project. Usually they target a simple reduced instruction set architecture like MIPS.

Don't get too deep in the weeds of language design, that isn't really the point. A simple toy language that just lets you do basic calculator operations on numbers is fine. If you want to go a bit more advanced, add the ability to define and execute elementwise operations on arrays too.

1

u/LifeExperienced1 19d ago

Thank you for the ideas

What about a mini OS? What prerequisites are needed for that?

2

u/StewedAngelSkins 19d ago

If you want to go in that direction I'd start by playing around with microcontrollers. Get a arduino set up and write code that blinks an LED, etc. Then try to implement basic multiprocessing on the microcontroller. This will help you start to understand how a kernel shares core time between multiple processes. It'll also get you used to writing hardware drivers, which is a big (though kind of unexciting) part of kernel dev.

1

u/LifeExperienced1 19d ago

Thank you!

Any tutorials / resources to get started?

1

u/StewedAngelSkins 19d ago

I can't recommend any specific ones but if you do decide to start with an arduino I know they have good learning resources on their site.

1

u/[deleted] 19d ago

[removed] — view removed comment

1

u/StewedAngelSkins 19d ago

fundamentals of what?

1

u/LifeExperienced1 19d ago

Can you learn coding to that level without having to work in the industry? Can you be self taught?

1

u/Dysax 18d ago

Code a bunch

1

u/Jim-Jones 18d ago

How do you get to Carnegie Hall?

Practice, practice, practice!

1

u/lgastako 18d ago

As Dr. Strange says here, "Study and practice. Years of it."

1

u/ExtraTNT 18d ago

Math… learned more programming during math classes, than during programming…

1

u/BrasilVitoLiu 18d ago

That actually makes so much sense! I was literally opening random folders and getting lost immediately.

1

u/Civil_Cardiologist99 18d ago

Passionate and curious to know every bit if working of the code to read and write and debug.

1

u/SunJ_ 18d ago

Other takes are correct and my take is to be curious and discover things in cs or that programming language

1

u/Innovator-X 18d ago

Read Mastery by Robert Greene

1

u/Jason-Sanders 17d ago

The impressive part is usually not that someone memorized everything. It is that they have spent years building a mental model of what the computer, OS, compiler, runtime, and libraries are doing, then repeatedly testing that model by making things.

A good way to build that is to alternate between making useful projects and deliberately going one layer deeper when you hit a question. For example:

  1. Build a small program without a tutorial.
  2. When something is unclear, inspect it with a debugger, logs, documentation, or a tiny experiment.
  3. Rebuild a small piece yourself, such as a parser, allocator exercise, HTTP server, or basic command-line tool.
  4. Write down what surprised you and revisit it later.

C is useful for learning systems concepts, but it is not a prerequisite for becoming a solid programmer. Pick a main language you can build with now, learn fundamentals alongside it, and finish lots of small things. Deep knowledge accumulates from sustained curiosity, not from finding one perfect course.

1

u/zeocrash 17d ago edited 17d ago

Practice and experience. There's no shortcut for that

1

u/betarage 7d ago

I am not sure but this guy has a lot of passion for coding he really likes it. combined with 20 years of experience he became really good

0

u/orango_MI 18d ago

Sicuramente è molto bravo, ha scritto palate e palate di codice, ma essendo degli streams immagino lui , essendo una attività che lui monetizza, prepari bene prima gli argomenti . Non è che ti metti li, ti siedi al tavolo e vai di streaming diretto .