@GameWorldRS

I am a computer engineering student and there is one prof in our university that really had an impact on a lot of us, teaching low level computer architecture and computer systems. He would preach the exact same things, and now, after completing the two courses that he teaches, I feel so confident with C, its like I am a completely different person. He had us write an emulator in native C for a RISC architecture that he designed a few years back. Took the whole term, just submitted the last part today. And oh boy, seeing that thing run assembly (that we also wrote) at millions of instructions per second, interfacing with devices, interrupts, using cache, the whole works, is such an amazing feeling. Try the hard stuff people, its amazing to see it work at the end and know that if someone asked you about that project in an interview or just out in the wild, you could explain to them every tiny detail because you TRULY know it inside and out.

@delphicdescant

I've tried to make an argument with this same basic lesson to so many people over the years. It rarely sticks, but I am certain it's the truth. Personal growth is everything, and efficiency without growth is nothing.

@petedavis7970

I started programming back in '78, at the age of 10. I think the better programmers naturally gravitate towards doing these kinds of things. Things you should do at some point, as a programmer: Write a compiler, write an OS, write a 3D renderer, write a text editor.

The compiler doesn't have to be great. It doesn't have to be practical. But it should be comprehensive enough that you can demonstrate a lot of the fundamentals of compiler design. In addition, this implicitly requires an understanding of assembly/machine code, which I also think is important. I think the compiler is actually the single best project a programmer can do because every programmer should understand what I compiler is doing. 
And you don't have a create a full-blown OS with tons of functionality. But again, enough to demonstrate an understanding of the fundamentals. And again, requires a knowledge of assembly and hardware. 
All of these projects; Compiler, OS, 3D renderer, and text editor, require really stretching yourself as a programmer and delving into areas that mainstream programming doesn't often go into. But there's tons of great techniques and data structures to be learned by delving into these areas.
I wrote a basic 3D game engine with some buddies back in the mid 90s. Wrote a pascal compiler in college. Wrote a 6502 OS many years ago and recently started tinkering with the idea of writing a basic 64-bit OS. I haven't done a full-blown text editor, but it's on my to do list. I've done smaller editors that were built into apps that had some basic functionality, and that's what piqued my interest in writing a full-blown editor. Like these other things, it's a whole rabbit hole of data structures and patterns to learn.

@user-lk2vo8fo2q

if i could offer a slight generalization: take time to actually understand how your tools work. this can mean writing things from scratch, contributing to open source projects, or even just studying other people's code in depth. It really is incredible how quickly you can outpace 90% of professional programmers if you work like this. practicing how to learn is a compounding reward. the more you throw yourself in over your head, the faster you'll get at pulling yourself out. eventually, you get to a point where prior experience basically doesn't matter any more because you're so good at learning on the fly. even if you're just looking out for your career, that opens a ton of doors for you.

@AbdallahMehiz

looks like the algorithm is giving this video the attention it deserves.
really tho, knowing the ins and outs of your projects and tools doesn't just force you to learn new skills, most of the time it makes you capable of saving time and avoiding problems in the long run.

@michamarkiewicz5355

Web dev here. I very much agree and I became "low-level" enthusiast not so long ago. A lot of people say that building projects is a best way to learn and I agree, but if all you do during those projects is using high-level libraries that abstract all the complexity you're not really learning much. Or if you doing same stuff over and over. For job of course you want to use high-level libraries that get quality stuff done fast, but for learning purposes it's a terrible mistake that's gonna make you stagnant.

@mohammadiqbal4668

I think people who are disagreeing are missing the point of the video which is do hard things to get confident and have deeper understanding of the things that you are working on but obviously if you need to ship a product out in the market take the help of tools which can get things done faster.

@dot32

If you do it the hard way, you learn how to program. If you do it the easy way, you learn how to click buttons in a user interface

@ricanteja

Teaching myself how to code and specifically low level code is what allowed me to be a Senior Software Engineer/Architect today. I started with Game Maker at 14 but quickly moved on to C/C++ and thanks to that I gained the confidence that allowed me to take advantage of opportunities that changed my life for the better.

@NanerBag

The "My job doesnt allow me to learn all these low level things argument" isn't the problem preventing people from learning the low level, its the consequence of avoiding the low level. If you don't know how the low level works then you simply become an user of the software, frameworks and libraries others created. They remains just magic to you, because you don't know what its doing, as such you're less effective at using it. Its like using a calculator without knowing algebra, you learn through brute pain and messing with things until they work, rather than from the underlying logic. Yes, you do eventually learn some stuff through sheer trial and error, and in the case of a calculator, you will eventually learn the patterns of the different arithmetic operations... But in the case of a framework tens of thousands of lines of code and concepts you've never heard of? Hard shit.

And plus, if we all just use whatever someone else has already made, without ever learning how it actually works, then what do we do when those developers who made all those wonders of software engineering retire? Whos gonna maintain that? And most importantly: whos gonna fucking improve it? Are we supposed to believe that the technology we have now is the best it will ever be, that there's nothing to improve, therefore no reason to learn it, and resign as mere users? 

Accessibility is great, but it will never beat fundamentals, not in programming, nor in any other life endeavour.

@lupinthird

Loved your message. As a person whose only goal in life is to garner as much knowledge as possible, your “time + effort = rewarding knowledge” message is how I’ve lived my entire life. You gained a new subscriber!

@eddiemeekin9180

I’m brand new to programming (installed python a few days ago) ran a few tutorials. Found it very intuitive and was having fun. I then saw a video on making a game in pygame. I first said to myself “no you need to finish these beginners courses first”
I obviously couldn’t wait and jumped straight into the game tutorial.. I’m loving it and feel like I’m understanding what/why I’m doing. Mostly because the tutor is explaining everything fully.

I then saw a comment on the video that went something like “I’ve just printed hallo wurld with python, now ill make this game” obviously being sarcastic. Lots of reply’s to the comment saying that it would be a terrible idea, and that such a person wouldn’t have a clue why they are doing anything.. but I did? I can’t wait to finish this tutorial and challenge myself to edit the code enough to feel like it’s my own game concept. I might not manage it. But it’s what I’m EXCITED to do

I guess the point in my comment is; you will ONLY learn the hard way. And failure is the best to learn from. And as long as your tutor is good enough at explaining concepts. You WILL understand the what’s and whys to your work

@angrywolfjr7164

The issue is, not everyone is a programmer, some of us are just artists who want to make simplistic yet express games, it's the reason things like RPG maker exist, we probably wouldn't have yume nikki, oneshot, omori, fear and hunger, etc, if "the hard way" was the only option, it 100% depends on goals

@malithrajapakse7509

Your video has helped me answer the question "Why bother doing this?" in the context of my own side projects. Your answer is well thought out, and I've been referring to your video to remind myself why I should continue. Thank you for posting this.

@JaviArte

Obviously, if you make everything by yourself, you will improve your confidence.

The problem I see with doing everything yourself is the time. And at work, where time is precious, I don't think it's productive to start from scratch everything.

@elatronion

I've made my own game engine, learned a lot, and now use Godot. I like this particular position where I'm efficiently using a game engine that's much better than mine while also being able to more deeply understand what it's doing. If I really needed to, because Godot is open source, I could modify it, which is a freedom I wouldn't of had if I didn't know how game engines worked.
My higher level of skill also allows me to do simpler things even faster and more efficiently. All of that is really awesome!

I think it's good to know how things work, but you don't need to reinvent the wheel. There's a certain point where doing that is no longer beneficial, at least.
Like, if I wanted to create a physics system, I'm clearly going to base my work off someone else's, and I don't mean code, I mean physics papers, software papers, Newton's formula.
I'm sure if I were to rediscover newton's formula that I'd have a pretty interesting perspective and understanding of physics, but the effort required to do such a feat would be near genius at that point. If also sometimes prevents us for really learning what we want. You mentioned that productivity and time-to-market may be the goal, you mention learning as your goal, and I think it also depends on what you want to learn. If programming is what you are learning, then sure, but if you want to learn game design, then learning how to make a PNG loader sorta distracts from that goal. And there's a lot of distractions along the way. At least, in my experience.
That's my two cents, perhaps like many thing in life, balance is the answer.

@Khigha87

I'm a coding noob and I'm glad I found this video at this point in my journey.  An analogy that makes sense to me is learning how to do Math (traditional paper and pen style) over learning how to use a calculator.  The person who learns Math will be far more efficient and proficient in using the calculator in the longer term. 

It's shocking how spelling and language skills have deteriorated because of spell checkers and grammar tools which have resulted in many forgoing learning the basics in favour of immediate output.  

I'm South African, and I get professional emails from respected organisations with spelling errors, (we spell colour with a "U" here for example), because the software you use has US English as a default. If you don't have the right understanding you won't be able to correct and/or compensate for the shortfalls of the tools you use. I need to be able to recognise when my calculator is faulty, which would be impossible if the calculator is all I know.

@sealsharp

Let's go to the extreme first:
Is it useful, to learn how every layer from setting up CPU registers to the highest abstraction works and recreate it? Yes.
Do we have time for it? No.

So where do we set the line?
In my experience, it is one layer below where you usually work.

In my dayjob, i do .Net applications with lots of lower level interop. Knowing c/c++ and archaic unmanaged programming ( no smartpointers! ) helps a lot when working with these components from a a managed environment.
In my free time working with Unity, i slowly digging one level below the surface. And now when i see systems in the asset store i not longer think "wow, thats magic" but more often "okay, i got an idea how that might work".

@perplexedmoth

Here's a reductio absurdum. Why don't you build your own language compiler? Jon Blow is doing this for example. Why should he or should he not? Should you write your own text rendering pipeline? How about building the tools to draw the art? The gist is, where do you draw the line? If your goal is to make a product and while doing it learn a new skill (i.e. an aspect of low level programming), then that's your goal. Learn and build something at the same time. Just know the cost. If your focus is gameplay programming, and game design overall, then it is perfectly reasonable to use an engine and finish 10 games and iterate on various ideas within the amount of time you could finish only one game, and focus on the gameplay only 10% of the time. So it all depends one's goals. There is no fixed answer.

@prodigy-343

Man you don’t have any idea how much I was needing this approach, thanks, pretty wise