Thanks for watching, hope this helped! ❤ Don’t forget that Brilliant has that 30 day free trial so you can try everything they have to offer-free-for a full 30 days! Visit brilliant.org/TheCherno - the first 200 of you will get 20% off Brilliant’s annual premium subscription!
How much code do you think you write in the average week compared to the average programmer who is currently spending 40+ hours per week writing code with current technology and is up to date with the latest coding practices?
Dear @TheCherno Thank you for your videos i was able to learn a lot can you please in the future make a series on CMake and Testing in C++ (Google Test, Google Mock)?
You could have also added: if you're on linux - you can record using RR, which gives you the added benefit of during debugging be able to reverse-continue and reverse-step. Fantastic tool, not only for finding hard non-deterministic bugs, but also for navigating a code base.
Reading code is a skill that is learned through practice. I've been doing it for more than 30 years in C++. I also wrote a lot of FORTRAN code before learning C and C++. Code doesn't need to be hard to read. In fact if it is hard to read, it probably should be discarded, or refactored. Don't make excuses for the STL. It is hard to read, for reasons I don't fully grasp. Don't accept hard to read code as being normal. If you have to maintain hard to read code. Make it easier to read.
@marcusgutierrez honestly pick up code by bits, get a simple c++ textbook get the basics(2 months) then from there object oriented programming(1 months) then data structures (2 months), then from you will have to venture into the dark and learn that you have a bigger world ahead and should get on a project that allows you learn more
This is amazing. When you went into the unreal engine code, I too was like "How on earth do you read this, where do you even start from". But watching you break it down, good Lord! Now I feel a bit more motivated.
YES! so much this. I worked on a debugger in an IDE back in the day, and I can't tell you how many customers we watched struggling to find issues even in their _own_ code while completely ignoring the debugger that was available to them. And to this day you can see very experienced and talented developers on youtube wasting so much time adding a few lines of printf code here, build, run, nope, need to add some more over here, churn churn. And now the debuggers are even more powerful.
I'm a relatively new engineer that graduated from a good school and got into a big game company thanks to that experience and I've been using a combination of your videos, several books (such as game engine architecture and modern c++) to "catch up" and learn how to work on a large software project.
As my boss once said: you don't know what your program really does until you've stepped through it with a debugger. With MSVC, you can compile your code with /JMC flag, enable "Just my code" in the VS options - Debugger, and then F11 will not step into standard library functions, only into actual code of interest.
Thank you. Schools might teach fresh programmers about "readability" and "maintainability" when writing codes. This shows that, in fact, the "debuggability" might even be more important in real life projects. Especially when things get really big and complex.
Yeah, I hear alot about "clean" code and SOLID principles, but I've never seen a large (>1 million lines) project that use clean or SOLID be debuggable or readable. I've seen inline ASM in projects from 20 years ago that are more readable than some of the insane class hierarchies that arise.
Readability is still important to understand the logic written. But no matter how good your code is written, if it has 1 million line of code there's no way to know where to read without the debugger.
Step debugging is a great idea but reading code can potentially involve a lot of prep. The more complex its interaction is with other code or the more dependent it is on timing (i.e., step debugging introduces bugs that otherwise wouldn't occur if the program were allowed to run at normal speed). You may have to mock classes or basically apply test-writing techniques to it. You may have to write an application just to exercise the code and output what you want to observe.
Coming from a corporate Java project, I"m quite amazed how hard to read I find C++. The different ethos of small to no indentation, lack of curly braces and empty lines makes these already abstract and hard to grasp functions harder still to read through. I used to love C++ in college, but now I'm glad I went with Java. Loved the multi threaded debug stuff!
the C++ code presented here is.... very utilitarian - it makes me sad to see and read it as well. Coding style goes a long way to enhance readability - proper usage of indentation, braces for scoping (one-liner if statements are disgusting!), proper variable names ("L" is not acceptable.. "), are all very important in writing maintainable code in a team-effort development.
You’re incredible! Thank you! And this is simple enough for anyone with code with breakpoints or something with a profiler, whether C++, Python, C#, even GDScript in Godot has ways of putting in breakpoints like this. I’m sure it varies based on the language how deep the call stack will give you, but it’s an excellent start. No wonder you have learned so much lol. You’re a treasure when it comes to C++, engine creating, and just programming in general! Thank you for all the time you put into all your stuff! I truly am gonna look into trying out Hazel but may wait until the next stable build to truly enjoy your new planned features 😊
This may sound basic to some but this may be the most precious piece of advice to grow. It took me too many years to fully grasp. Read, debug, and validate with small experiment that you execute.
Imagine starting out coding by trying to read through Unreal's codebase, sure fire way to put off any beginner. Great video though, this kind of stuff is so overlooked in most youtube videos.
When I first started programming, my brother who was working in industry told me about walking through the application to figure out how it works. This video finally gave me the appropriate context to truly understand what he meant when he said that.
14:50 absolutely perfect timing, I'm here waiting for UE5 to compile to try fixing the physics bugs present in their physics engine myself (at least for some temporary fixes/workarounds because it is REALLY broken) and I always struggled with fully grasping how the engine worked and somehow never really considered using the debugger this extensively for this
can confirm, there are some ps2 games that work better than ue's physics... :(, trying to fix it by teleporting them or nudging other NPCs around you by the forward vector of your character is not a solution, it needs a more lower level solution.
oh and I REALLY hate it when actors get stuck in each other and thus can't move because the game thinks it's always colliding with something... it makes ue feel unfinished
Not quite only other peoples code but mainly knowing the language and being able to implement and design the software using design pattern and software paradigms...so studying the field really is the only way to know what you're doing and beeing able to optimize..things like red black tree structures..search algorithm..understanding big O notation and such are essential to write 'good code'.
Yan, listen. I owe you a bugfix at work now :D I was doing what I had always been doing for one particular quirk of the app where it just crashes when it can't find a certain 3rdparty lib, and you would usually just put the .dll files and a .jar file (don't ask me how an enterprise C++ app depends on a .jar, it's a long story) into a specific folder and it would work. And I was doing it the way I always do it, and it still crashed. Then I watched your video, thought "Well, why don't I try this out?". Ran the scenario in the VS debugger and it spits out "cannot find jvm.dll". Guess what, I put the path to the jvm dll into the PATH variable and it suddenly works now. I'm really annoyed at myself for not trying this out sooner :D Thanks man, you really saved me a few days of suffering just now :D
i know this is c++ specific. but one thing you can take advantage of is that generated c++ code can still have breakpoints set on them. so you don't need to manually add a destructor (or default constructor) in your source to be able to set breakpoints on them. i found this to be extremely helpful when trying to understand code in the field where i cannot easily just drop my custom coded version of a program in to a system. another tip that i found useful is to take advantage of breakpoint actions. they can be used as a printf substitute when you're analysing asynchronous timing behaviors and, again, are unable to drop in a custom build loaded with your own diagnostic printf statements. printf statements have a nasty habit of exhibiting Heisenberg uncertainty behaviors. the more you try to observe the state of your running program by adding printf/logging code, the more the timing/momentum of a program's asynchronous interactions changes, obscuring its true behavior. i found that using breakpoint actions go a long way in mitigating that uncertainty. the last tip has to do with using F10/F11 to jump into the "start"of your program. unfortunately, if your program has non trivial static or global variables, that technique is not quite enough to debug into the initialization of those global variables. what you can do is enable Show External Code, and go even lower on the call stack to set your breakpoint into the C runtime startup functions. this will allow you to see all your globals get initialized and help you understand why using non trivial globals in the first place is poor practice 😅
Really awesome video man! Just so you know, you're one of the reasons I write C++ and use Visual Studio! Thanks again and if you're ever in the UK, I'd be happy to meet up! Cheers.
Hey Cherno Thank you very much for the video it helped a lot, can you please tell whether you are planning to make complete course on Debugging or Design Patterns?
Cherno, I've seen a few empty destructors in your classes. I haven't seen that they have defined move constructor and move assignment operators, meaning that they are disabled. Implicit moves happen way to often in the STL, which in your case will be pesimized to copies. Unless you know for sure your objects won't be copied or moved around, I think you should either: A) Define the move constructor and move assignment operator for every class you defined a destructor for. B) Do not define those empty destructors until you really need them (which will also reduce binary size).
I'm an absolute beginner programmer, but I want to be able to read code easier. I find with my own code, it can be difficult for me to get a sense for what's going on on both the macro and micro scale. A huge issue is probably that I'm not very experienced at breaking down the problem from the beginning in order to be able to create the right blocks of code or determine how it should run logically. I hope it gets a lot easier to visualize code on the fly with time and practice, cause when I have those moments of clarity while coding it's a fantastic feeling! Do you guys have any recommendations for the best way to practice?
Debugging with breakpoints is a great way of really understanding what your code is doing. 👍🏻 In my experience it also helps having good Documentation (Classes, Functions Comments), which I tend to read when the debugger passes over the related lines of Code. That, + and the Values of the variables help me make the 'Click' in my head and understand all that's happening there. Great videos & channel 👍🏻
Thanks for this information. I'm new and don't have any idea how anything works lol. Found your videos when I was trying to learn C++ for UE5 but took a break because I'm learning Python for a college course (so much easier). Anyways, I knew debuggers were important to use in programming but this video really helped me. Literally just applied a breakpoint to something I am working on right now for a class so that I could get a better understanding of the arguments that I can pass into a function. Needless to say I think this is a game changer and I wish I knew about this earlier instead of just using print(somevariable) to check/troubleshoot everything.
Basically: use the debugger. This advice doesn’t work everywhere. For example if you’re an ETL developer using SQL server and your dev and test environments are available to everyone so if you run something you don’t understand to see what happens you could potentially ruin the environment for everyone else on that day / week or however long your refresh times are
What about doing an overview video on Visual Studio? (cause I think it has so many useful tools but not a lot of beginner friendly documentation/tutorials)
The parallel stacks feature is a game-changer. I constantly run into exactly the same issue and never knew about this tool. I just wish VS Code had the same thing.
At 7:27 there is an equal sign with a slash through it instead of != (i is not equal to object.end()). I've never seen that in code before. How would you even type that?
😅 i printed out my code and others' code as well. It can help if you can pencil and paper in it, especially if it won't run unless you implemented it correctly in a main program. It`s also funny how you learn certain coding guidelines and how to write comments etc. at university. But nobody really reads code with you, because everything is trivial to them so it has to be trivial for you as well. As a beginner in a job with all the fancy things you know, do yourself a favor, and take an older colleague by side and read some code with him. He will show you what tools are used for what and why. Once you get the hang of coding, start messing around with everything when you can. If you have an architectural idea, refactor the code as you like, and make and break as many builds as you need. That really teaches you what works and what doesn`t.
People like to call things by all kinds of different names. I tend to refer to () as either parentheses or individually as parens. ( left paren, ) right paren. For some reason a lot of people refer to {} as curly brackets, but the name I've always known them by is braces. { left brace, } right brace. It seems somewhat universal that people refer to [] as brackets, but I've seen some backwards people refer to them as braces. [ left bracket, ] right bracket. Anyone have any others?
Does anybody knows the tool Cherno is using to draw on screen so seamlessly? Like on 8:28 Windows built-in stuff takes screenshots first and doesn't look like that precisely thanks in advance
It might sound weird but it made me interested in how to set up a debugger without VSC now. I don't mean basic debugging, I have that in VIM, but that visual representation of threads - man, I want that.
Your videos are enlightening and filled with innovative ideas, particularly those related to open-source projects for complex systems like Operating Systems or Software Defined Networks (SDN), such as ONOS and RYU. In the VoIP realm, this includes platforms like FreeSWITCH and Kamailio. My question centers around the best way to comprehend the underlying code in these sophisticated projects. Unlike simple C or Python code, these require installation and intricate configuration. How does one begin to understand and engage with such complexity? I'm specifically interested in this topic because I need to grasp some aspects of the freeSWITCH code in order to modify and customize it. As a junior programmer, I find the insights in your videos incredibly valuable and would appreciate any guidance you can offer on this subject.
lol that last part I can relate to. We had a yearly camp when I was a kid, and I took a thick book to read with me called "How to learn C++ in 21 days." Ya, that was a fruitless endeavor.
@@ziggyharding5207 Step 3: realize chat gpt is still pretty much in its infancy and already doing some really cool shit Step 4: realize chat gpt is indeed great, just that people are hyping it more than what it is. They're great for writing and reading code, just don't expect it to understand an actual project. It can write tests, just don't expect it to write decent tests for an actual project. Doesn't mean it's not great Step 5: realize that even years from now it's not going to replace programmers, at all, but it will help us improve our workflow. I find it funny how people so easily hype up chat gpt, but also how quickly they dismiss it and call "actually not great". Calling Chat GPT not great to me is just so incredibly short-sighted, but that's just my 2 cents
I remember that story about the camp and reading code on paper. You talked about it in another video, made me laugh back then, made me laugh now again 😆
Hi Cherno, thanks for your great video and every time I learned a lot from that! BTW, speaking about learning C++ in UE5, would you like to make some video to talk about how you use it?😃
Thank you for all your videos inspiring me a lot. If possible, topics cover multithreads, Cuda-GPU, or how to design architecture system or when to use object or pointer to object for a data member in class wil be really appreciated. Thanksssssssss!
Amazing btw what lens did you use at the beginning of the video and did you do anything special to achieve that “come in focus range and track focus” effect?
Im confused. with the third one. I can't find anything that says debug at the top of my vs code. Is there something that i need to have clicked on? or i need to have the program Pre compiled?
Actually just reading the code is not that bad. Especially away from a PC. You can then focus on on the algo and structure and not get tripped up on the PC user mistakes when you compulsive lying type. But you should try at some point. But separate concerns is a good thing
na - if you can't understand or can be done better then rewrite it - lol - but best way to start is with pencil and paper and get a conceptual idea of the whole code base and only use the ide to drill down when you need to get to the fine details.
"mmm, slow down there, cowboy.. I'm gonna tell you when you can do the next thing.. and i'm going to watch you do it.. oh yeah, that's my good little program.. you listen to daddy"
Thanks for watching, hope this helped! ❤
Don’t forget that Brilliant has that 30 day free trial so you can try everything they have to offer-free-for a full 30 days! Visit brilliant.org/TheCherno - the first 200 of you will get 20% off Brilliant’s annual premium subscription!
Can you do a video of your vscode configuration? Plug-ins you have and their non-default changes you have 🙏
How much code do you think you write in the average week compared to the average programmer who is currently spending 40+ hours per week writing code with current technology and is up to date with the latest coding practices?
Hey, you have 529,000 subs now)
Dear @TheCherno Thank you for your videos i was able to learn a lot can you please in the future make a series on CMake and Testing in C++ (Google Test, Google Mock)?
You could have also added: if you're on linux - you can record using RR, which gives you the added benefit of during debugging be able to reverse-continue and reverse-step. Fantastic tool, not only for finding hard non-deterministic bugs, but also for navigating a code base.
Reading code is a skill that is learned through practice. I've been doing it for more than 30 years in C++. I also wrote a lot of FORTRAN code before learning C and C++. Code doesn't need to be hard to read. In fact if it is hard to read, it probably should be discarded, or refactored. Don't make excuses for the STL. It is hard to read, for reasons I don't fully grasp. Don't accept hard to read code as being normal. If you have to maintain hard to read code. Make it easier to read.
any books/resources you recommend that helped you understand c++ & understanding code?
@marcusgutierrez honestly pick up code by bits, get a simple c++ textbook get the basics(2 months) then from there object oriented programming(1 months) then data structures (2 months), then from you will have to venture into the dark and learn that you have a bigger world ahead and should get on a project that allows you learn more
This is amazing. When you went into the unreal engine code, I too was like "How on earth do you read this, where do you even start from". But watching you break it down, good Lord!
Now I feel a bit more motivated.
yeah actually.
How did he get Unreal Engine source code? It's not open source, right? Is it the source code or a project code?
@@melihmete807 it's open source
@@dark_lord98 It is source available, not open source.
@@williamclapp9694 It is open source for people whi agree the licence. But its not a Free Software.
Feel free to make more videos about debugging! This is full of cool stuff that I honestly didn't know about. That F10 trick is especially cool.
YES! so much this. I worked on a debugger in an IDE back in the day, and I can't tell you how many customers we watched struggling to find issues even in their _own_ code while completely ignoring the debugger that was available to them. And to this day you can see very experienced and talented developers on youtube wasting so much time adding a few lines of printf code here, build, run, nope, need to add some more over here, churn churn. And now the debuggers are even more powerful.
I'm a relatively new engineer that graduated from a good school and got into a big game company thanks to that experience and I've been using a combination of your videos, several books (such as game engine architecture and modern c++) to "catch up" and learn how to work on a large software project.
As my boss once said: you don't know what your program really does until you've stepped through it with a debugger. With MSVC, you can compile your code with /JMC flag, enable "Just my code" in the VS options - Debugger, and then F11 will not step into standard library functions, only into actual code of interest.
Great tip!
omg ty
it is the first time that i learned that there is such a option.
Thank you. Schools might teach fresh programmers about "readability" and "maintainability" when writing codes. This shows that, in fact, the "debuggability" might even be more important in real life projects. Especially when things get really big and complex.
In my school they taught both traceability and debugging of code. Yet I learnt still new things here, so valuable lessons! :)
Yeah, I hear alot about "clean" code and SOLID principles, but I've never seen a large (>1 million lines) project that use clean or SOLID be debuggable or readable. I've seen inline ASM in projects from 20 years ago that are more readable than some of the insane class hierarchies that arise.
Readability is still important to understand the logic written. But no matter how good your code is written, if it has 1 million line of code there's no way to know where to read without the debugger.
You guys coded in school?
Step debugging is a great idea but reading code can potentially involve a lot of prep. The more complex its interaction is with other code or the more dependent it is on timing (i.e., step debugging introduces bugs that otherwise wouldn't occur if the program were allowed to run at normal speed).
You may have to mock classes or basically apply test-writing techniques to it. You may have to write an application just to exercise the code and output what you want to observe.
Coming from a corporate Java project, I"m quite amazed how hard to read I find C++. The different ethos of small to no indentation, lack of curly braces and empty lines makes these already abstract and hard to grasp functions harder still to read through. I used to love C++ in college, but now I'm glad I went with Java.
Loved the multi threaded debug stuff!
the C++ code presented here is.... very utilitarian - it makes me sad to see and read it as well. Coding style goes a long way to enhance readability - proper usage of indentation, braces for scoping (one-liner if statements are disgusting!), proper variable names ("L" is not acceptable.. "), are all very important in writing maintainable code in a team-effort development.
its just formatting style its possible to write java like code.
You’re incredible! Thank you!
And this is simple enough for anyone with code with breakpoints or something with a profiler, whether C++, Python, C#, even GDScript in Godot has ways of putting in breakpoints like this.
I’m sure it varies based on the language how deep the call stack will give you, but it’s an excellent start.
No wonder you have learned so much lol. You’re a treasure when it comes to C++, engine creating, and just programming in general! Thank you for all the time you put into all your stuff!
I truly am gonna look into trying out Hazel but may wait until the next stable build to truly enjoy your new planned features 😊
This may sound basic to some but this may be the most precious piece of advice to grow. It took me too many years to fully grasp. Read, debug, and validate with small experiment that you execute.
Imagine starting out coding by trying to read through Unreal's codebase, sure fire way to put off any beginner. Great video though, this kind of stuff is so overlooked in most youtube videos.
8:33 debug => Window => parallel stack
I just got my first job as a junior software engineer. This is really helpful, thanks as always for your great videos!
I subscribed for c++ series. These are the videos I stayed.
it's coffee got me rolling on the floor
When I first started programming, my brother who was working in industry told me about walking through the application to figure out how it works. This video finally gave me the appropriate context to truly understand what he meant when he said that.
14:50 absolutely perfect timing, I'm here waiting for UE5 to compile to try fixing the physics bugs present in their physics engine myself (at least for some temporary fixes/workarounds because it is REALLY broken) and I always struggled with fully grasping how the engine worked and somehow never really considered using the debugger this extensively for this
Damn And im here absoluely shitting the bed when it comes to diving into Hazel code
can confirm, there are some ps2 games that work better than ue's physics... :(, trying to fix it by teleporting them or nudging other NPCs around you by the forward vector of your character is not a solution, it needs a more lower level solution.
oh and I REALLY hate it when actors get stuck in each other and thus can't move because the game thinks it's always colliding with something... it makes ue feel unfinished
Cherno has the best way of explaining things in such a way that I feel like i understand, imo
15:05
> UE
> technical documentation
> ever existing, in any useable or useful state
LMAO, said Scorpion, LOL even.
Not quite only other peoples code but mainly knowing the language and being able to implement and design the software using design pattern and software paradigms...so studying the field really is the only way to know what you're doing and beeing able to optimize..things like red black tree structures..search algorithm..understanding big O notation and such are essential to write 'good code'.
Yan, listen. I owe you a bugfix at work now :D I was doing what I had always been doing for one particular quirk of the app where it just crashes when it can't find a certain 3rdparty lib, and you would usually just put the .dll files and a .jar file (don't ask me how an enterprise C++ app depends on a .jar, it's a long story) into a specific folder and it would work. And I was doing it the way I always do it, and it still crashed. Then I watched your video, thought "Well, why don't I try this out?". Ran the scenario in the VS debugger and it spits out "cannot find jvm.dll". Guess what, I put the path to the jvm dll into the PATH variable and it suddenly works now. I'm really annoyed at myself for not trying this out sooner :D
Thanks man, you really saved me a few days of suffering just now :D
i know this is c++ specific. but one thing you can take advantage of is that generated c++ code can still have breakpoints set on them. so you don't need to manually add a destructor (or default constructor) in your source to be able to set breakpoints on them. i found this to be extremely helpful when trying to understand code in the field where i cannot easily just drop my custom coded version of a program in to a system.
another tip that i found useful is to take advantage of breakpoint actions. they can be used as a printf substitute when you're analysing asynchronous timing behaviors and, again, are unable to drop in a custom build loaded with your own diagnostic printf statements. printf statements have a nasty habit of exhibiting Heisenberg uncertainty behaviors. the more you try to observe the state of your running program by adding printf/logging code, the more the timing/momentum of a program's asynchronous interactions changes, obscuring its true behavior. i found that using breakpoint actions go a long way in mitigating that uncertainty.
the last tip has to do with using F10/F11 to jump into the "start"of your program. unfortunately, if your program has non trivial static or global variables, that technique is not quite enough to debug into the initialization of those global variables. what you can do is enable Show External Code, and go even lower on the call stack to set your breakpoint into the C runtime startup functions. this will allow you to see all your globals get initialized and help you understand why using non trivial globals in the first place is poor practice 😅
Thank you so much for enlightening me! I didn't know the debugging was this much of important.
i don't know why but i just love c++
Really awesome video man! Just so you know, you're one of the reasons I write C++ and use Visual Studio!
Thanks again and if you're ever in the UK, I'd be happy to meet up!
Cheers.
I was waiting for this video, honestly. You should do more videos about debugging
Hey Cherno Thank you very much for the video it helped a lot, can you please tell whether you are planning to make complete course on Debugging or Design Patterns?
good video, love specific no-nonsense tips like this
Cherno, I've seen a few empty destructors in your classes. I haven't seen that they have defined move constructor and move assignment operators, meaning that they are disabled. Implicit moves happen way to often in the STL, which in your case will be pesimized to copies. Unless you know for sure your objects won't be copied or moved around, I think you should either:
A) Define the move constructor and move assignment operator for every class you defined a destructor for.
B) Do not define those empty destructors until you really need them (which will also reduce binary size).
My bad, this isn't your code.
Empty destructors also hinder some more ideal ABI situations, assuming it could be trivially destructible
Love this... thanks for everything up till now. Hope you keep making these kind of videos.
i finally learned how to use a debugger and my god it’s helped. very good video and i def learned from this ! thank you!!
This is so insightful, I need to do this!
Man this was incredible. Your channel is such a great help. Thanks for doing this!
Composing music is similar in a way. Score reading is a vital part of learning to compose, and playing the music of others improves your performance.
Learnt a couple of new things. Thanks.
I'm an absolute beginner programmer, but I want to be able to read code easier. I find with my own code, it can be difficult for me to get a sense for what's going on on both the macro and micro scale.
A huge issue is probably that I'm not very experienced at breaking down the problem from the beginning in order to be able to create the right blocks of code or determine how it should run logically.
I hope it gets a lot easier to visualize code on the fly with time and practice, cause when I have those moments of clarity while coding it's a fantastic feeling!
Do you guys have any recommendations for the best way to practice?
Debugging with breakpoints is a great way of really understanding what your code is doing. 👍🏻
In my experience it also helps having good Documentation (Classes, Functions Comments), which I tend to read when the debugger passes over the related lines of Code. That, + and the Values of the variables help me make the 'Click' in my head and understand all that's happening there.
Great videos & channel 👍🏻
I really wish your videos existed back in my undergrad days (99-03). It would have saved me from going to law school and staying with comp sci.
Excellent tips, thank you!
This is amazing quality content mate. I love the unreal engine example a lot.
Thanks for this information. I'm new and don't have any idea how anything works lol. Found your videos when I was trying to learn C++ for UE5 but took a break because I'm learning Python for a college course (so much easier). Anyways, I knew debuggers were important to use in programming but this video really helped me. Literally just applied a breakpoint to something I am working on right now for a class so that I could get a better understanding of the arguments that I can pass into a function. Needless to say I think this is a game changer and I wish I knew about this earlier instead of just using print(somevariable) to check/troubleshoot everything.
superb video man, thank you!
Thanks for the information it was really helpful
Basically: use the debugger.
This advice doesn’t work everywhere. For example if you’re an ETL developer using SQL server and your dev and test environments are available to everyone so if you run something you don’t understand to see what happens you could potentially ruin the environment for everyone else on that day / week or however long your refresh times are
Amazing, I was just looking gdb up! Thanks for posting.
I liked this video the moment I saw Debug->Window->Parallel Stacks! That blew my mind!
What about doing an overview video on Visual Studio? (cause I think it has so many useful tools but not a lot of beginner friendly documentation/tutorials)
The parallel stacks feature is a game-changer. I constantly run into exactly the same issue and never knew about this tool.
I just wish VS Code had the same thing.
I literally started reading through UE5's code a few days ago and couldnt get breakpoints to work tysm
At 7:27 there is an equal sign with a slash through it instead of != (i is not equal to object.end()). I've never seen that in code before. How would you even type that?
great video ...keep up the good work
This video was very helpful to me!!! wow.. Thank you very much.!!
😅 i printed out my code and others' code as well. It can help if you can pencil and paper in it, especially if it won't run unless you implemented it correctly in a main program.
It`s also funny how you learn certain coding guidelines and how to write comments etc. at university. But nobody really reads code with you, because everything is trivial to them so it has to be trivial for you as well.
As a beginner in a job with all the fancy things you know, do yourself a favor, and take an older colleague by side and read some code with him. He will show you what tools are used for what and why. Once you get the hang of coding, start messing around with everything when you can. If you have an architectural idea, refactor the code as you like, and make and break as many builds as you need. That really teaches you what works and what doesn`t.
Thank's! Great Video!
Those Brilliant math animations look great. They are identical to what I have seen in my imagination when I did study math in my education years)
I dedicate my c++ life to you
You inspire me to be better at programmjnt and i thank you
Fantastic video, great work
11:20 don’t drink and code. Especially if you’re working on a pick and place gantry robot.
People like to call things by all kinds of different names. I tend to refer to () as either parentheses or individually as parens. ( left paren, ) right paren. For some reason a lot of people refer to {} as curly brackets, but the name I've always known them by is braces. { left brace, } right brace. It seems somewhat universal that people refer to [] as brackets, but I've seen some backwards people refer to them as braces. [ left bracket, ] right bracket. Anyone have any others?
Yet another banger from THE Cherno.
Petition to change your name to THE Cherno.
Visual Studio is an actual beast when it comes to debugging.
The frustration as a developer comes when the security team lock down environments so tight you can't even attach a debugger to see what's going on.
Does anybody knows the tool Cherno is using to draw on screen so seamlessly? Like on 8:28
Windows built-in stuff takes screenshots first and doesn't look like that precisely
thanks in advance
I learned a lot about how to use VS. This time, I even learned features about VS debugger. This could be potentially a good topic
It might sound weird but it made me interested in how to set up a debugger without VSC now. I don't mean basic debugging, I have that in VIM, but that visual representation of threads - man, I want that.
Your videos are enlightening and filled with innovative ideas, particularly those related to open-source projects for complex systems like Operating Systems or Software Defined Networks (SDN), such as ONOS and RYU. In the VoIP realm, this includes platforms like FreeSWITCH and Kamailio.
My question centers around the best way to comprehend the underlying code in these sophisticated projects. Unlike simple C or Python code, these require installation and intricate configuration. How does one begin to understand and engage with such complexity?
I'm specifically interested in this topic because I need to grasp some aspects of the freeSWITCH code in order to modify and customize it. As a junior programmer, I find the insights in your videos incredibly valuable and would appreciate any guidance you can offer on this subject.
Debugging is really fun! This is a really great recommendation for a code review strategy. Also TIL parallel stacks view. Awesome. -jduck
lol that last part I can relate to. We had a yearly camp when I was a kid, and I took a thick book to read with me called "How to learn C++ in 21 days." Ya, that was a fruitless endeavor.
step 1: copy paste the code into gpt-4 and ask for a detailed explanation
No
Step 2: realise chat gpt is actually not great
@@ziggyharding5207 Step 3: realize chat gpt is still pretty much in its infancy and already doing some really cool shit
Step 4: realize chat gpt is indeed great, just that people are hyping it more than what it is. They're great for writing and reading code, just don't expect it to understand an actual project. It can write tests, just don't expect it to write decent tests for an actual project. Doesn't mean it's not great
Step 5: realize that even years from now it's not going to replace programmers, at all, but it will help us improve our workflow.
I find it funny how people so easily hype up chat gpt, but also how quickly they dismiss it and call "actually not great". Calling Chat GPT not great to me is just so incredibly short-sighted, but that's just my 2 cents
how would you copy paste a library that has 60k lines of code or more ?
I tried to use gpt-4 to get me to write type safe generics and it couldn’t do it properly
I remember that story about the camp and reading code on paper. You talked about it in another video, made me laugh back then, made me laugh now again 😆
Hi Cherno, thanks for your great video and every time I learned a lot from that!
BTW, speaking about learning C++ in UE5, would you like to make some video to talk about how you use it?😃
Omg i thought you just had to read it all... I could never get anywhere, this was a revelation.
Thank you for all your videos inspiring me a lot. If possible, topics cover multithreads, Cuda-GPU, or how to design architecture system or when to use object or pointer to object for a data member in class wil be really appreciated. Thanksssssssss!
Coffee is the answer!
I completely agree😂
Great as always!
Amazing btw what lens did you use at the beginning of the video and did you do anything special to achieve that “come in focus range and track focus” effect?
I'm impressed that this video is not about chatgpt
Amazing content. Thanks
Thanks for your video
Thanks, that's very useful! By the way, how to do that with mac?
Analyze possible malware code. Just run it!
This sounds like a lot of fun hehe
Then it becomes a challenge: catch the malicious parts before they're able to run!
Use a VM?
What drawing tool you are using?
Is there any way you take a look on the rust-lang in a video?
wait, you can use step into to start the program?
Great video. Now I will try to learn how I can run and debug the Linux kernel.
you can connect vscode to gdb debugging the linux kernel running inside qemu. it's a little fiddly but you can find guides on the web on how to do it.
@@Spongman oh thank you.
Debug mode is my friend.
Im confused. with the third one. I can't find anything that says debug at the top of my vs code. Is there something that i need to have clicked on? or i need to have the program Pre compiled?
You need to use Visual Studio, not Visual Studio Code. They’re different
Actually just reading the code is not that bad. Especially away from a PC. You can then focus on on the algo and structure and not get tripped up on the PC user mistakes when you compulsive lying type. But you should try at some point. But separate concerns is a good thing
The best way to read and understand code is to just code alot and recognize the patterns
will tools like source insight, understand help
?
na - if you can't understand or can be done better then rewrite it - lol - but best way to start is with pencil and paper and get a conceptual idea of the whole code base and only use the ide to drill down when you need to get to the fine details.
Does VSCode have these same sort of debug features or is it only in Visual Studio?
Thanks. How deep would you go into the call stack before stopping though
@thecherno3 Oh wow thanks!
Trying to transition to c setting up all the tools is a pain this is Micosoft visual studio right?
Amazing! How would you do the same debug using linux?
great Video!
The Cherno is like one those guys that chernos
"mmm, slow down there, cowboy.. I'm gonna tell you when you can do the next thing.. and i'm going to watch you do it.. oh yeah, that's my good little program.. you listen to daddy"
"No more access violations. You behave, or else I'll take another stick of your RAM away!"