BEST WAY to read and understand code
To try everything Brilliant has 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!
Support ► / thecherno
Instagram ► / thecherno
Twitter ► / thecherno
Discord ► / discord
Chapters:
----------------
0:00 - The Secret
4:04 - Example 1
10:50 - Example 2
14:48 - Example 3
16:37 - One Last Story
🌏 Need web hosting? ► hostinger.com/cherno
💰 Links to stuff I use:
⌨ Keyboard ► geni.us/T2J7
🐭 Mouse ► geni.us/BuY7
💻 Monitors ► geni.us/wZFSwSK
This video is sponsored by Brilliant.
Пікірлер: 285
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!
@bits_for_bytes
Жыл бұрын
Can you do a video of your vscode configuration? Plug-ins you have and their non-default changes you have 🙏
@dingoDogMan
Жыл бұрын
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?
@phusicus_404
Жыл бұрын
Hey, you have 529,000 subs now)
@michelchaghoury9629
Жыл бұрын
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)?
@simonfarre4907
Жыл бұрын
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
5 ай бұрын
any books/resources you recommend that helped you understand c++ & understanding code?
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.
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.
@jacobyoung6876
Жыл бұрын
Great tip!
@Yougottacryforthis
Жыл бұрын
omg ty
@exlife9446
Жыл бұрын
it is the first time that i learned that there is such a option.
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.
@yashbhatt4498
Жыл бұрын
yeah actually.
@melihmete807
Жыл бұрын
How did he get Unreal Engine source code? It's not open source, right? Is it the source code or a project code?
@dark_lord98
Жыл бұрын
@@melihmete807 it's open source
@williamclapp9694
11 ай бұрын
@@dark_lord98 It is source available, not open source.
@puffin_000
11 ай бұрын
@@williamclapp9694 It is open source for people whi agree the licence. But its not a Free Software.
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.
@Jenkkimie
Жыл бұрын
In my school they taught both traceability and debugging of code. Yet I learnt still new things here, so valuable lessons! :)
@SoapSoapCrayon
Жыл бұрын
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.
@soniablanche5672
3 ай бұрын
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.
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.
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 😊
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.
Man this was incredible. Your channel is such a great help. Thanks for doing this!
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.
Love this... thanks for everything up till now. Hope you keep making these kind of videos.
I just got my first job as a junior software engineer. This is really helpful, thanks as always for your great videos!
I was waiting for this video, honestly. You should do more videos about debugging
Amazing, I was just looking gdb up! Thanks for posting.
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.
Thank you so much for enlightening me! I didn't know the debugging was this much of important.
good video, love specific no-nonsense tips like this
This is so insightful, I need to do this!
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.
Cherno has the best way of explaining things in such a way that I feel like i understand, imo
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'.
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.
I subscribed for c++ series. These are the videos I stayed.
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 👍🏻
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
@tanujcherian3911
Жыл бұрын
Damn And im here absoluely shitting the bed when it comes to diving into Hazel code
@tomebundalevski1872
Жыл бұрын
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.
@tomebundalevski1872
Жыл бұрын
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
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 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 😅
superb video man, thank you!
Excellent tips, thank you!
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!!
Thanks for the information it was really helpful
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!
@KyranFindlater
Жыл бұрын
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.
@ayoubbelatrous9914
Жыл бұрын
its just formatting style its possible to write java like code.
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 😆
i don't know why but i just love c++
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
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?
This is amazing quality content mate. I love the unreal engine example a lot.
great video ...keep up the good work
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.
Fantastic video, great work
Great as always!
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?😃
Thanks for your video
Learnt a couple of new things. Thanks.
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.
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!
I literally started reading through UE5's code a few days ago and couldnt get breakpoints to work tysm
This video was very helpful to me!!! wow.. Thank you very much.!!
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
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.
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?
Amazing content. Thanks
Debugging is really fun! This is a really great recommendation for a code review strategy. Also TIL parallel stacks view. Awesome. -jduck
I liked this video the moment I saw Debug->Window->Parallel Stacks! That blew my mind!
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).
@manucanedo8039
Жыл бұрын
My bad, this isn't your code.
@reductor_
Жыл бұрын
Empty destructors also hinder some more ideal ABI situations, assuming it could be trivially destructible
Thank's! Great Video!
I dedicate my c++ life to you You inspire me to be better at programmjnt and i thank you
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)
Amazing! How would you do the same debug using linux?
Coffee is the answer! I completely agree😂
Thanks, that's very useful! By the way, how to do that with mac?
Is there any way you take a look on the rust-lang in a video?
Visual Studio is an actual beast when it comes to debugging.
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.
Very helpfull!
Yet another banger from THE Cherno.
@wyattrichardson6609
Жыл бұрын
Petition to change your name to THE Cherno.
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?
Thanks. How deep would you go into the call stack before stopping though
@hovikkevork3069
Жыл бұрын
@thecherno3 Oh wow thanks!
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
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)
😅 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.
15:05 > UE > technical documentation > ever existing, in any useable or useful state LMAO, said Scorpion, LOL even.
it's coffee got me rolling on the floor
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?
Great video. Now I will try to learn how I can run and debug the Linux kernel.
@Spongman
Жыл бұрын
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.
@betterfly7398
Жыл бұрын
@@Spongman oh thank you.
Omg i thought you just had to read it all... I could never get anywhere, this was a revelation.
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.
What drawing tool you are using?
bro i love you
Does VSCode have these same sort of debug features or is it only in Visual Studio?
great Video!
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.
Now lets do that and call it dynamic malware analysis :D my head spun out
Very useful, thanks a lot. A UE5 series would be fantastic ;-)
@b3water643
Жыл бұрын
hahaha
It seems so obvious once you say it but this completely changed my perspective when I'm trying to wrap my head around some random github repo.
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.
Analyze possible malware code. Just run it!
@frankhart2188
Жыл бұрын
This sounds like a lot of fun hehe
@theRPGmaster
Жыл бұрын
Then it becomes a challenge: catch the malicious parts before they're able to run!
@loucascubeddu
Жыл бұрын
Use a VM?
that theme looks sick, anyone know the name to search for it??
Trying to transition to c setting up all the tools is a pain this is Micosoft visual studio right?
I'm impressed that this video is not about chatgpt
Thanks is is really excellent advice and would be very helpful if the company I work at figured out how to get a debugger working on their project. Until then it's printf debugging for me :(
Useful
however there is no msvs in linux or mac, so sad. I only have a m1 mac, when I study object model, I used lldb, I was nervous to open the disassembly, i Found that was arm asm, which is different from the x86 asm. so sad
I also used to print out code and read it on the bus :)
What about java programs where every behaviour is in a @annotation ? For example @Getters @Setters @Service ... public class X {}
will tools like source insight, understand help ?
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?
@TheCherno
11 ай бұрын
You need to use Visual Studio, not Visual Studio Code. They’re different
Please which IDE is that?