Ex software engineer here - couldn't agree more. Learned so much trying to write assembly language on my first (ZX81) computer... not very well, but it worked!
I have to disagree a little here. During my studies, I had problems finding projects that I found really exciting. The result was that I always did some bullshit projects that somehow came to mind. It wasn't until the 4th semester that I started to find projects that really captivated me. If I had followed the instructions in this video, I would probably have dropped out of university long ago because I couldn't find anything that captivated me. The problem is that I like solving problems. But I'm not good at coming up with them. When I first started working, I could hardly save myself from problems. Today, my list is far longer than I can work through. From scripts for automation to extensions for IDEs, I've done all kinds of things. So, if you have a passion for programming but can't find anything that captivates you, then hang in there. Find partners and solve their problems together until you stumble upon something that captivates you. If you only chose the subject because of the supposedly good salary, believe me, it's not worth it. Otherwise, have fun.
@@ashrithreallyashrith6875 Yes. Think of something you really *really* want to program. You can start small (it doesn't have to be a huge program) but be ambitious. Good luck. Huw
@@LearnWithHuw Sir, I have come to realize a couple of things, after working my butt of in this IT field. First is, everybody all knows something is right or wrong, but they always end up doing the wrong things anyway. I don't know why that is, I just know that it is the "trend" now. And the vast majority of people always do this, myself included. Second, is that exercises and assignments are "Good" if you want to "impress" the employers, in a general way. Because, employers always give you assignment and exercises. However, the real projects do not work like that, at all. In fact, even companies don't work like that. When it comes to real projects, you always have to fix the code of the previous developers(Who already quit the job), and it is a huge mess to deal with. Doing exercises and assignment will not train you on how to fix that. Third, in my opinion, just go to github, clone a project, then work on top of that project by building more and more features that you can think of. I think that's more efficient than practicing exercises. Courses are full of exercises and stuff, yet, I have seen guys who can't program after getting done with the courses. The best way to me, is either build something on top of the already existing projects(There are tons of them on github), or learn by interacting with your friends, and both will check each other's mistakes to correct them.
yes but no. it's not about exercises or tutorial. its about specialize. you dig deep into a specific or two-three specific languages. tutorials enable the ground work. you want a .NET backend, Angular frontend app. here's a limited version. you want to make a nextjs app with authentication and use APIs and services ? here you go. want to learn cloud like azure, aws or google? here you got an app or similar use these to build something solid. now you got your feet wet. time to continue if you like. 😂
Just want to add that exercises ARE useful at the beginning of learning to program to get practice with the different structures and learn their semantics. After that, bigger programs are mich more useful
I couldn't agree more. I started learning python about a month ago. I'm a dad and I work. I'm at a point where I'm just going through exercises and their solutions cos I'm still trying to wrap my head around some of the basics. I'm hoping that a few months from now, I'll have the confidence (and courage) to tackle more serious problems. 🙂
I think this explains why it may sometimes be difficult to grasp explanation of an algorithm or understand certain data structures until you actually use them in building applications with real world use cases.
Writing games is the best way to learn programming or improve at it. This is just an axiom at this point. And the worst-leetcode and a corporate job. Dear youngsters, if you dream about perks and a job @ FAANG and not about all those cool apps/frameworks you invent, please don't torture yourself/your code reviewers. Just start climbing the corporate ladder right away instead of doing precisely that only ten years later.
I started a program in 2015 , it was a tool that generated normal maps through regular color textures. Today , it's a 3D application with a pbr viewer that takes a scene and bakes it using various path tracing methods, with also a pseudo realtime raytracing viewer , and distributed on gpu using cuda. not only it skyrocketed my C++/OpenGL/Cuda skills , but it taught me CMake , build configurations , avoiding circular dependencies , proper interfacing of modules , reduction of dependencies using various methods like pimpl, and dependency injections , unit testing , python/bash scripting for downloading + building custom libraries and integrating them into the main project, SIMD , multi threading , QT UI , and will probably add a bit of networking to distribute computation across multiple devices, proper architecture for a path tracing engine , performance optimization by ditching the virtual method dispatch and replacing it with static polymorphism . But hey ... companies want people solving leet code instead those dumb morons lol
Because leetcode-style problems are easy to assess in a short time (time is critical in recruiting). Also selected for smart, driven people willing to jump through hoops too.
Being good at Data Structure and Algorithms (DSA) is a strong indicator that you will be able to learn and be good at anything else. Besides it is precisely DSA that built the foundation of all those optimizations you used in the very first place. What companies want is not people who can use tools, but people who deeply understand tools, in order further those tools and create new ones.
I think a better way to put this is to work on projects, not code challenges if I'm understanding you right. My university focuses a lot on projects, like file system explorers, games, compiler, etc. Those kinds of assignments are wildly useful.
Oh, I agree. If they are encouraging you to develop fully-fledged programs that's a lot different (and much better) than the typical "coding assignments" that people spend so much time on.
From my perspective, as soon as I understood Input, Processing, and Output, and the fact that Information Technology is all about storing, manipulating and displaying information, programming became more and more fun. Logic is also important. Fun fact is that you don't have to cram the syntax, that's what docs are for. Just sketch, or visualize your output then figure out your input and how you'll manipulate that input to form your output. Example: I want to register a student to my system. First thing, I will visualize my output, maybe a form to collect the student's information. Then I will model the student's information (data) to store it programmatically. Then once that has been stored in my database, the rest is to display it whenever it's needed.
The stepping stone to being a good programmer is to understand the language fundamentals. You can't write large programs without that. And so learn to solve the small problems the teacher gives you and then advance to complex programs
As a Counterpoint to this opinion: all large programs consist of many, many small programs, and you can learn the language better by being motivated throughout because you have something that you really want to do. That's very hard to feel for small problems. I think the mindset that thrives on small problems is much more of a mathematical mindset.
@@LiterateProgramming as a counter counterpoint think of all that you'll learn by building an entire house without learning anything about wiring, plumbing, pouring concrete, or industry standards related to building safety. i think this is a ridiculous mindset that sounds profound on the surface but is a facade for gatekeeping a skill set from a wide range of people who could learn it methodically, on behalf of a bunch of elitists who believe you should just be smart enough to grasp it as a whole and muddle your way through until it clicks.
@@stegwise I didn't suggest that one could do without learning the material methodically by building it up from first principles, with many small examples etc. I did not suggest replacing the entire class or learning experience by a large project - but based on my experience, except a small elite of people already dedicated to programming, the large number of students (these days) will not experiment, they do not appreciate method, and they might have to be lured into the belly of the beast. Granted, many of these probably shouldn't be programming in the first place. I also agree with your summarizing comment though that's not what I was advocating. The name of my UA-cam channel kind of gives that away: "Literate Programming" is not for the faint-hearted or the weak-willed, and it is the opposite of "muddling through ... until it clicks" - it's structured, methodical, modular and mindful of both the human and the machine. I picked it up as a graduate student a long time ago, and it saved me from tinkering.
Couldn't agree more! When I stated programming in the 80s, I learned the basics (BASIC and 6502 machine code) from home computer magazines. And then I got really curious about computer graphics, particularly 2D platforms games like I used to watch people play in the arcades. I wanted to recreate my own version at home. We didn't have UA-cam or websites, we had to figure out algorithms all by ourselves, and self learn about compilers, memory and CPU architectures to optimize code for speedy execution. That's how I became a programmer, and everything I learned took me on to a professional software developer career.
Yes, that's right. It's great to have so much information a mouse-click away on UA-cam and the Internet but the only *real* learning has to be done the way it always was done. Best wishes Huw
I was asked if I wane do a degree in programming in at a university. I'm glad I didn't subscribed to that advice. My plan get the basics on a platform like solo learn. Python and c++. See what it can offer and go wild
I do agree that project help. But I would say start by programming a command line project. Once you master that you can than move on to learning about GUI and building a GUI project. Biggest thing is to know how data is transferred across many file or classes. This depends on the language you are learning.
Okay, but I have the opposite problem. I have worked on too many projects before understanding data structures and algorithms, and other significant things. University is actually useful to me, it has improved my logical thinking tremendously.
I largely agree with your sentiment. Certainly you don't become an engineer without doing any engineering... But exercises can be useful too. The exercises in casey muratoris performance aware programming series, for example, seem fairly well considered. It depends entirely on the objective of the material. If you're trying to familiarise somebody with fundamentals of formal grammars, or more importantly, trying to introduce a process such as how to take a piece of logic and achieve that same thing but faster, or how to use a debugger to observe the logic as it's executing and observe as the programs state changes over the time, then exercises can be particularly useful. More so, probably, than trying to learn such procedures and methods on arbitrary logic. I think beginners and people trying to gain insight into something new should begin with exercises. But I definitely agree it's no substitute for then putting that knowledge into real world application. It's like training muscles in isolation instead of training the body as a whole. But this is at the core of why everybody says they learned everything on the job. Or why people say they learned so much from their first real world project. But then deliberate practice is also a thing. And that's pretty essential.
I agree that writing real programs is critically important, as is _reading_ real programs (perhaps even more so), but exercises are not completely useless. All forms of practice will help you improve your craft, and it's much more important that you practice than how you practice. Most students spend all day on instagram, reddit, tiktok, etc. and that is their true downfall. In order to learn programming, you need to actually program, who knew!?
I started programming in the early 1980s. My first program drew a solid filled circle on the screen based on the size and color provided by the user. My second program was a checkbook balancer/budget tracker. It too had tens of thousands of lines of code. I had no idea what was doing and I failed a lot, but I learned way more by building an actual application than I have through any other methods.
What a gem this video is! This should be an obvious fact yet this is so profound! Been wondering about the best way to learn coding/programming and there's just too many advices out there but this piece of advice just solidified and confirmed that I'm on the right track of learning. Keep creating man!
Writing own programs is just a prerequisite I would say. It's like learning a foreign language just by speaking. Reading, analysing and understanding an existing code written by other programmers is the next level of mastering. And the final milestone to become a programmer is contribution to existing projects, fixing bugs, design and development new features. Thanks to open source everybody can easily learn all of those elements. 🙂
This is excellent advice, and I am saying this as a college professor who is trying to force his students to solve small exercises but, I must admit, mostly fails, because the students can't get interested. Myself, I learnt programming like you: I was a young physicist and had to write a massive C++ library. I had already experienced the thrill of large programs during an internship when I had to debug a massive rocket science program. I will use this as an inspiration to change my teaching from small exercises to large (literate) programming term projects.
That is amazing, I am sure most of you old school developers are way beyond us with stack overflow being a click away. We got lazy having those solutions. I sadly forgot half of what I learned in college though I had a great GPA, so I am focusing on real-life projects, system design and sometimes Leetcode tasks, since bigger companies like to give them. I didn't have a need to use data structures besides arrays and maps in Android development but I decided to go into enterprise development and hopefully swe, so everything really helps. I feel strange because I am interested in many things and have many hobbies but also feel good solving complex problems. I wish I could have two half-time jobs but freelancing is too volatile and unpredictable
I totally agree with that point. As you start programming for a big project you face many problems that would multiply your learning speed instead of making some slow progress by just solving some simple coding exercises.
@@1Lll_llllllLLLLllllll_llL1 i have two degrees in music and cant find a job. ive been trying to study code and ive got one thing on Github, but i have yet to make a full website. my back aches because im fat. i did the music thing when i was hip and cool. now i dont know what to do as im aging...... you wish you were a musician.... i wish i was a programmer. go figure lmao
i fully agree. I am currently learning Python, i’m pretty much a newbie based on my standards, but thinking with your own head is the key to being a programmer. An exercise will only make you able to create something someone else wanted you to make.
There is another great benefit to writing whole programs: you have to learn how to create a "structure" for the code, one that is understandable, reliable and maintainable. This is something that you can never learn from coding exercises.
As a college student learning programming, I do agree. In order to do so though you have to learn how to understand documentation and APIs. THAT would be a good course any beginner programmer would learn from.
I would say that it is true but exercises can teach u concepts and practices that u wouldn't learn Attempting everything on ur own hands on coding is more beneficial but exercises have benefits too
Huw's a fantastic name, mate. Great video, too. I, like many others (id wager) have been looking for 'exercises' to practice to make coding a breeze. I envisioned 'wax on, wax off' type drills to make me a great programmer without any effort. There are no shortcuts to success, anyone saying otherwise will try and put their hand in your pocket.
Agree 100% - makes total sense to me. If you are in any way interested in programming, you will have no problem at all finding significant projects to work on!
You're absolutely right! I'm a self taught programmer. When you think like a programmer you don't have any problem finding programming tasks. Your hard drive is full of doublets of files? Write a program! You have to produce a series of letters with a given skeleton but some changing passages? Write a program! You want to show what company near you have service times when you are closed? Write a program! For me it's not the problem to find a task. I'm never happy with my programs they have to be refactored, bugs occur I never thought of (the SD card of my pi was trashed full of log files so my program refused to run). Often I see my code and think: too complicated, ugly, messy! I'm never finished!
Before getting into programming I didn't like messing with computers in general but now I also sometimes write bash commands to make my life easier, like deleting a bunch of json files downloaded via google drive exports. Still, I had a bad experience with Linux in college (since I installed it on a VM which ran out of memory a loot) and was lazy back then in terms of actually writing code, not only learning concepts and solving things in my head/on paper 😅 Now after some professional experience I mostly believe practice is better, though I still challenge myself with Leetcode (and this makes me more ready for a potential swe role, 'cause big companies swear on it 😅)
Just my cents on this topic , you could have been more clear and emphasis that you mean leet code sort of questions. A better way to put it would be like - you can solve small problems but keep a big picture in mind on how you would apply those data structures to your problems. The way I see programming is like abstractions. You solve problems and build projects by fitting those abstractions on those problems. As someone else said, its also about storing and managing data. It reminds me of legos for some reason. Please if you disagree kindly add your opinions, I would love to hear them. Ah, another thing, theres not much room for ego. I mean, its better to keep that aside and take everything as a learning opportunity No one knows everything, and when it comes to algorithms as an author once said, you can't be satisfied and think thats the best it can be. Theres always room for improvements.
Totally agree with you. I started programming in the 80s with BASIC, then with DBASE and FoxBase, in my country at time internet was very limited and no online documentation, just books. No windows, just DOS.
It's impossible for modern learners to do that now, I think. It takes discipline to work things out rather than Googling. But it's a discipline worth acquiring! Best wishes Huw
Just want to say, a a beginner myself, that i think exercises and assignments are crucial for beginners to really get a hold of the basic. But within a couple months (or weeks), one should be able to delve into attempting more serious programs. Thank you.
I think a better plan would be to build a tool. Build a small program that does something useful, but that you can extend. There's no real danger that you won't be able to make your program bigger. The danger is that you won't be able to break it into composable pieces that you can reuse. So, starting with a smaller tool, first, means you can complete a working product, which is a sizable achievement in itself in coding, and that you can think about how components work together, which is the grand slam of learning coding. Composability is systems thinking.
When I learnt programming I would do the exercises and then turn them in-to real world programmes, this was frowned upon, but I kept doing it my way and as you have pointed out you learn so much more.
That's a very good way of tackling he problem. Anyone who feels weighed down by exercises and assignments should do exactly that! Many thanks for the comment. Huw
Us GenX kids had a big advantage when it came to HAVING to code. Because here you had your expensive micro and you turned it on and it said either READY or OK. And you were in basic which basically did nothing until you build something. And luckily the games were not very exceptional so indeed (Same here) you started to build your own games or crack existing ones to make them easier. Those two things, for me were more valuable than 4 years of college. The only new thing I saw in college was Unix (which I adore to this day) and C which I love but now I’m going with younger mistress called Zig. C was like: “this is as fast as my assembly and almost as small and it’s quicker to build things.” And to this day I often just build another puzzle game or shooter. Mainly puzzle games because I like those I would love to make a micro OS for embedded systems. Going back to my college years where we did OS design and implementation but on an old Z80 doing it on a RiscV would be nice.
this video is absolutely a gem! Great advice. The analogy of programmer and musician was insightful and made me think what would I like to work on really. I usually say I don't know what to code and ask for ideas because I implicitly was thinking to myself what can I program right now with my skills that I can see end to end how to do. But this video made me think outside my current abilities and just focus on what do i find interesting and what would i like to be able to program and realize that it would stretch me and force me to learn things which is great. Just like with music, a musician hears a song and they just have to play it and learn it and they get to it and they find it makes them do things they can't do presently. I love all of this but I have a question. What or how do you go about programming something that is way outside your current knowledge and abilities? You wouldn't know the roadmap on what to do to get to the end goal. I love converters and would really like to make a converter that could take a epub file and make it a pdf. I use these all the time. But I have no clue how to make one. Or I would love a program that would automatically click the skip ad button on youtube videos and even better is just mute and black out the screen during ads. But I have no clue how to do that either or where to start researching. Do you have advice on how to about building software that does something you have no clue where to start? Thanks. I think someone who could mentor a programmer on their projects would be super cool. So if you wanted to do 1:1 mentoring where you have a introductory call and hear the project idea and you know what the person needs to do, then they could pay you to mentor them and build out a roadmap on how to accomplish their software goal. That is something I would pay for to save me time having to research so much. And then it might be that after that I know enough how to research on my own for projects that are in the same domain. But yeah if i am just starting out on my first project that is I/O device programming heavy and I don't realize that, then paying someone for that first mentoring would be good and then other I/O projects would be easier since I have enough fundamental knowledge of that domain. Then if I had a project that was OS heavy and didn't realize it, another mentorship cycle would be good for that.
Thank you. I can't advise in detail on a specific project goal. As a general principle, though, I'd say that if you feel a project is beyond your present ability, break it down into parts and start with the part you think seems most approachable. Then gradually build towards the more complex elements. I'll put another video online soon that tries to offer a few ideas on this. Good luck! Huw
I know html, css and some gml for gamemaker. Since I struggle a lot with gml I decided to learn c. I’m currently watching a 4 hr video of brocode to get started with c and after that I will write a text adventure game. Glad I clicked on this video it makes me confident in learning it.
I still remembered when i wrote a metronome program in foxpro on dos when i was a kid, just finding how to beep the tempo correctly took a long hours. I am still programming as a hobby to make a program of something i am interested, it may be big or small, some finished and some don't, but i have learned things steadily.
I'm trying to expand my knowledge in a new area - Python programming. Also, I like django and already completed two or three really big courses which were supposed to teach me how to create django apps. But, instead, when I've started my own project, I've burned out, felt like I've learned nothing. And in time left this idea. Now, I'm starting for the 3rd time. I've already refreshed Python with one of the specialization course which was good - overall refresh of basic Python language structure. And now, I'm starting again, my new project. And I hope that this time I'm not going to let go but keep it pushing until MVP and then add extra functions layer by layer. Thank you for this short and important message - to dig into my own "passionate project" not another django course. BTW: I'm also learning to play drums! I want to be a rockstar and I'm learning rock grooves&fills ha ha ha :D
Keep at it! If you hit a barrier or get bored, go and play those drums then come back to programming when you feel more positive. Make sure you don't get so frustrated that it stops being fun. Good luck!
I dont think you HAVE to know what to program. Its okay to not have any ideas, but you should at least be somewhat confident those ideas will appear eventually. Sometimes it better to choose your projects wisely.
I partially agree, but a lot of assignments are training you how to think logically. Learning a proof for why merge sort is O(n log n) isn’t really useful to building a crud app but is useful, however, for training you how to think in small steps.
btw, my second program was similar to you and it was I HUGE learning experience!!!!!!!!!! When you write big code you learn VERY QUICLEY to structure you code, but sadly most programmers today SUCK at it!
@@stevenbliss989 That's so true. And yet from the comments I can see so many people who are resistant to that idea. I always encourage people to be ambitious beyond their current skill level. That's when the hard-core learning begins!
I'm making games, too. A virtual card game. Its taught me a lot, so far. Thank God for LLM's. Any question is quickly answered, but I try not to copy-paste
I'm an AI development manager of 5 years and an indie game dev contractor of 6 years. Never have I ever memorised a single algorithm or done any stupid leetcode crap. I also have a degree in game tech and a masters in cgi. Still didn't need to do all that stuff. I learned all my most important lessons by actually building things. When I wanted to learn a new language I just think of a game or app to develop with that language or tech stack and after all the struggles and hurdles I come out the other end of the project now actually understanding a new language or framework. Ignore these UA-cam leetcode gimps.
That's the Real-world v Theory. There really is no substitute for, as you say, "actually building things". I still find it surprising that some people argue against that. Many thanks for your comment.
If you are new to programming and don't know fundamentals, you don't just dive right into big programs. For example you want to make a tic tac toe game, people who has never coded in their life aren't gonna say hmmm I need a for loop here and a list. Some people really live in a fantasy world on UA-cam
I agree with you about the exercises. How many times can you write a converter or a lunar lander? Those projects are for the basics like IPO charts, flowcharts and converting logic to algorithms. When I think back, writing a MS Paint rip-off in C++ is where I realized what coding really involved. I loved the idea of having to research the graphics code. Heck, it makes me want to write something I haven't right now.
You are also remembering the excitement of creating real programs. That is another thing that students miss when they confine their efforts to solving exercises. The burning enthusiasm to write programs needs to be instilled at as early a stage as possible (in my view). Best wishes Huw
I agree writing programs is the best way to learn programming. However, the unfortunate reality of getting a programming job, especially FAANG / Big Tech and startup jobs, is you have to learn how to solve medium to hard Leetcode style programming problems in 30 to 45 minutes (possibly via whiteboard) because companies use those types of problems to filter candidates.
I was about to say that. No matter how many and impressive projects you build, if you cant solve problems you are given in the hiring process you cant get a job.
True talk. Over 20 years software development experience (in loads of languages) says; "he is bang on the money" ==> best way to learn to program is by programming 🙂🙂
I am a student in my final degree of CS bachelors in France . I respect your opinion because i did SO many projects during my curriculum and all of them were failed ones. I mean yes we created apps we choosed even games that were composed of small exercices .. but .. never worked ! I had like a trauma of big projects that didn't work I mean , whenever the exercices' scale grew bigger and algorithms got complicated, they became more difficult for me to make them work and I feel I'm lost ! But what I learnt from the experience is exercices that work are just like small programs And a programmer must relate to them in some way and never get scared of the size of the project or how it is unrelated to them !
In that regards , I advise students that face my problems to start and see big programs as small exercices ! I discovered by experience for example this year that trying to document a code you've written makes you detect why it isn't working and makes it seem like it's a small exercice you have just solved ! I am trying to take advantage of this strategy and this seems like it is starting to work and makes big code seems like smaller programs Never start from zero and always be a detective Because a programmer is a detective! He tries to find the patterns in all programs And creates a reasoning that is easy for him to understand, manage and maintain Never be scared to ask for help , take advantage from others' help In the same time , analyse , understand And test , test , test ! The problem is smaller than you think And taking others' code especially if it's more beautiful or elegant or simply works is OK ! However Never understanding the pattern behind it won't make you a real programmer
Sounds like a planning issue. Writing code is a very small part of it. The rest is planning and solutioning. Harder to get lost if you have things broken into users stories and focus on mvps.
@@bertski7950 the time you replied I was already in the peak of my sufferings because of my ancient method in parallel programming xD Really one must plan before writing code the less modifications done on the actual code ( try and error xD ) the better It's like imagining the code being executed before It's even tested Testing should really be a verification that the code works rather than the main concern Thanks again for your tip it came in a good time xD
If you are new to coding, write this - you have a cube (rocket) and horizontal line (land), client should be able to pick fuel type and planet, both have different take off patern , on "up" key rocket should take off accordingly. Happy coding :)
I was teaching programming at a university for applied sciences for 5 years. In every semester, I recommended to choose your favourite Arcade Game (Pac Man, Frogger, Asteroids, whatever) and while I teach some math and coding concepts you go on with your project, that's the only homework. Those who did, evolved fine. Oh, I forgot: When I see a certain lack of skills for a student, then I keep him a certain exercise, just him. Plus: I fill that gap for everybody in the lecture (often, he's not the only one with that gap)
You’re absolutely right. I did a full degree and fortunately got a good job because I was good at coding challenges, but quickly realized I couldn’t build an application or write production code worth crap. I basically had to learn everything from scratch. University classes should be having students build functional software to learn, not just writing code to implement some algorithm 90% of students will never touch again.
I can see from some comments that are pro-example-solving that people are thinking "how can i pass tests to get my first job" rather than "how can I build a career as a really good programmer". The fixation on passing tests is really counterproductive. Thanks for your comment. Huw
This was my biggest issue with my coursework in university. I wanted to make projects and my professors wanted vocab tests and reinventing the wheel types of assignments.
Have been a BASIC, assembly language, COBOL programmer back in the 1980s and 1990s. Now working with ExtJS, PostgreSQL, Delphi, PHP. To be honest, I can barely imagine, what programs I want to write for self education. The 65536th kanban board? Another bug tracker? Wait. There is one exception. Sometimes I feel like programming technical stuff like PID controllers in C on STM32.
Having taken both approaches I agree and disagree. I'm new and as much as programming something like a MUD server is more fun, I start banging my head against a wall. If I want to get better at things like data science or machine learning, it's going to take me learning the math skills and implementations exercises offer, since I don't come from a math background. It's the difference between exercising and using your body to do practical things. Both serve their purpose in tuning your abilities. That being said, I still agree working on programs is overall the more valuable experience.
Can't agree more. I am by education majored in Artificial intelligence and Data Science. But I'm very curious about software engineering. I started to make softwares (mostly web based) for petroleums and similar businesses. I started to make them for free first to learn, and once I got the hang of it, I started to charge. I don't like front end and designing, hence, I save time by asking gpt to improve designs. Because let's be real, leetcode is boring, and doesn't teach software engineering. Good for a little mind exercise sometimes, but not useful, you'd get experience from projects, and leetcode gives no experience.
Thanks. I get the feeling that a lot of people are learning to "pass" leetcode tests rather than learning to write real programs. Of course, doing both is possible but writing programs is the better learning experience. Thanks for your comment. Huw
I’ve done some exercises to get familiar with the language, C mostly. From that I got the insight I needed to finally start to make a program. I do have a game in mind which is a card game using AI machine learning to train NPC’s . But it’s about to get so complicated now I’m about stop understanding what’ve done and why it works so far.
If a problem seems too complicated, break it down into smaller parts. Programs that seem too complicated usually are trying to do too much too quickly! Good luck.
Hello, I started programming out of necessity, because I was not satisfied with the solutions on the software market, however I must say that learning from experience has a small problem, namely you can find that you have certain "knowledge gaps" which theoretically a well-structured course should cover.
I have nothing against well structured courses (I teach several myself! 🙂). However, knowledge is only theoretical until you put into use. In my view, the *real* learning happens when people create programs of their own. If they have to fill gaps along the way, they will learn and remember far more than they would merely by studying isolated problems with model solutions. Best wishes Huw
I learned to program by writing a web app used by 30 people, completely agree that a small program is different large program, cause it requires you to think deeply about architecture and stuff
I am learning web development, we used to solve those coding exercises, and when i tried to do some real world challenges i was lost. I had to go and learn a lot more.
i am not a programmer but i love programming on my own desire, the importante things are only 2, just define the initials and update the initials thats it, functions are just way to manipulate the initials so you can get the final output. and thats it
Learning should ideally be a combination of watching (or reading) on the subject and actually sitting down at your computer and writing programs. You need some of both but it's when you write programs yourself that you will learn the most!
I want to see this man teach a beginner in programming, code complex programs right away without using exercises and/or problems. If he cannot then he should not say that his theory is the "only way" to learn programming.
@@LearnWithHuw Thank you for your response. But I haven't seen in my entire life of someone who become a good programmer who started building complex program right away. This is from a guy who have been teaching programming for the last 15 years or so. And I have a lot of students who become senior programmers or working as lead in medium size to large software company. But they all started learning the basics through exercises before building complex ones. I am also teaching on a country right now wherein kids come into college without even having seen a single programming code let alone write one. Sure building complex stuff will speed up your programming skills. But claiming that building complex program right away for a new programmer is the only way to learn programming is just silly. And please don't sell me books so that I will learn your stuff...lol
@@LearnWithHuwHi there! Is this advice for more intermediate programmers, or for beginners too, if so, what projects do they work on? I teach Python, so I’d really appreciate some coding project ideas my students can do, my teaching method is very hands on, I start from small exercise then do projects based on their level.
@@AayaatAlakhras-Codegirls I think beginners can be guided through moderately large projects as long as they take it a small bit at a time. Watch out for a "code along" video I'll publish later this week. This will guide a beginner through the process of writing an adventure game. The first lesson is just one class: a Room. But once they've coded that it's a short hop to an entire map. Each step introduces 1 or 2 new ideas and soon they are building a *real* program rather than learning techniques and syntax one (unrelated) problem at a time. I think most people get much more satisfaction from creating fairly big programs than they do from solving coding exercises but that doesn't mean that they don't learn all the same skills along the way. (Anyway, that's how I see it!) Best wishes Huw
This video has made me realise that I have no genuine interest in coding. What I was interested in was the high salary and the potential to be able to boast that I worked for a faang company. People who have a genuine interest can't help but tinker for hours daily on some project. It Is something that consumes most of their thoughts. If you like me have jumped about from say Java, to Django, to Flask, to JavaScript. From wanting to be a front end developer, then switching to backend, then back to front end then trying full-stack , then MERN and you either haven't the slightest idea how to start a project or your idea is so basic it wouldn't impress a small child never mind an employer then programming is not for you. Find something you genuinely love doing and see if you can do it for a living.
Programming certainly isn't for everyone. Maybe you'll rekindle your interest later on. If not, I hope you find some other skill that really does excite you. Best wishes Huw
Agree totally. I'm writing a multibody/constraint race car simulator now. It's a multithreaded DirectX 12 with my own physics engine using a direct solver with intrinsics. I've written multiple engines and have seven released racing sim titles under my belt. The number of Leet or other code exercises I've done in my 25 or so year career: Zero. I've just never seen the point.
90% of all corporate programmers end up writing programms that other people thought of. That's the job of a software engineer. If you're learning, what "big complicated" programs should they write? If you find that tinkering with mechanics is your thing, you start with a bike or a soapbox car and not a real one. That is overwhelming. Many Rockstars also don't write their own songs. Also, you can write programs that actually work easily. The point of the exercises is to show the stuff that is necessary to a programm but not actually for its core function. If your only goal is a "working" peogramm you'll get one. With vulnerabilities and bugs. Among the most famous ones: sql injections. But sure, don't give them simple tasks that they can write in a week. Ask them what programs they want to write and let them try it when they say "a real time video chat" when you know, they barely manage to write a file manager.
Hey Huw, I agree, typing out line and lines of BASIC published in the computing monthly magazine or from code books. No fun and no appreciation of the lessons. This is a sound piece of info that your subscribers have over the competition. I myself did what you describe (built programs (small & large) that tie multiple things together like [guis, I/O, threads, processes...]. Though having you point it out was the first I knew about it being such a benefit. I also think learning how to describe your project in common language is now also just as important as tackling the coding challenges? After all, how do you test it if you can't describe it? :-) Have you done any of your games using TDD?
Thanks for the comment. I don't use any formal testing methodologies. What I do is write a script that automatically inputs a series of commands to "play" the game from stat to finish so that I can be sure I haven't messed something up accidentally. Best wishes Huw
Let me understand this more, First i should learn how the programming works from reading books or watching tutriols, and then work on a gudied project or a non-guided project and just do every bits myself if i stuck i go to read the part in books and solve it and move to next part or ... altogether should i just find a project and start it learning my way in and out of it without any initals concept and let myself be indulge with all the knowdlege there just move on with it.
Programming is a hands-on activity so you can learn theoretically (reading and watching tutorials) while simultaneously working on a project of your own. Give it a go! Best wishes Huw
100% agree. Solving little code puzzles is an entirely separate endeavor from writing actual software. Judging a potential employee based on one or two randomly chosen puzzles is a meaningless waste of time. It leaves the interview process wide open to personal bias, racism, and ageism.
Saying that they're a complete waste of time it's probably NOT UNDERSTANDING the purpose of them. The real mistake is to think that they're intended to make you a "great programmer", and of course, in the whole sense of what that implies, they're not capable of providing that. They're INCREDIBLY USEFUL to learn, acquire, or even master a few aspects of programming that otherwise would be harder to acquire just by creating "real life programs". They're a shortcut to many people that need to have a quick exposure to punctual things, to be then able to continue advancing in their learning path. Probably they're overestimated by some people (and companies asking to have a stupidly strong fundation on them), that's true. But if you're a student acquiring the bases of programming, giving them a few months is a great investment.
@@LearnWithHuw Agree! Being involved in comprehensive processes such as writing complete programs must be the priority. They serve as a supplement to the overall process. I think companies are, in part, responsible for giving them such a limelight place... Frankly, I don't know why, when a good professional's skill set extends far beyond that single aspect.
Good perspective! But not realistic! Beginners can't just start with big programs! It's like asking a neophyte mathematician to try to prove Goldbach's conjecture. Where will they even start? For self learners, exercises and coding challenges are like formative assessments in the academic world and serve the purpose of skills and confidence building. Programs and projects are summative, as self confirmation of their ability to handle more and more complex programs. Should one only do exercises and drills? Obviously not. But it is difficult to think someone would be able to handle anything remotely complex without a good grounding (the different data structures and algorithms, the ability to decompose problems, readable coding, good use of documentation, proper testing, etc...) Writing a mess that somehow work to some extent without knowing how to inspect and improve it is not a good way to learn programming. What would work best: getting the fundamentals with drills and targeted projects, then moving on to mostly projects (progressively larger and complex while also reading others code of similarly complex projects), finally using one's creativity to come up with interesting app ideas and implementing them.
To be fair, I get what you Sir are trying to say...but its a quite rude and offensive saying "Maybe then you are in the wrong profession", which genuinely sounds like my CS Uni profs that I would describe as "neurotic old grandpas" if you catch my drift... I say that because I find myself struggling with "what should I program exactly?". In a world where nearly everthing already exists as it is, it feels lame and difficult to find something that would be worth pursuing, in a way that would either be a great "passion project" that might grow into something more (perhaps even a sellable product?) or just "to have something to show for" when trying to switch sub-fields (say from boring FinTech to Graphics-related programming such as game development etc). But this does not come about easily...so its a bit heavy-worded I'd say...
Nobody asks you to invent some new and amazing product to sell - or to have impressive portfolios that demonstrate your vast knowledge in some domain. Just to program something you'd like to program. Like a musician learning to play an instrument - he isn't trying to compose some amazing symphony that will impress the entire industry and make him a billionaire, he is just trying to learn how to play his own favourite songs!
@@peterlinddk I don't see why my point would not be valid here...the "favourite song" analogy should actually be on the same level as "a passion project", take "Manor Lords"(the game) as an example...not everybody come up with something that would make * click * in their heads and have at the very least a genuine starting point before engaging in some initial sketches/designs before then embarking on the "making a program" prat of his speech... Also the "to invent"-part is a completely unnecessary sentence, as I have not suggested to "build the next big thing" or any nonsense like that...
I'd say writing your own Tiny BASIC compiler is a good start! You know it's easy. You know it's impressive. More importantly, you will have the ability to design your own DSL (Domain Specific Language) that is so useful in your future endeavors. Writing your own text editor, or better yet, IDE, would be good, too.
I love this. I've actually started my own adventure game after watching a couple of your videos on the subject! One thing that I get slightly hung up on is that as I code things I notice the different ways of doing things and get stuck on wondering what is the 'right' way to do things. This can really slow me down and be a bit paralysing in some cases. I am wondering what the best course of action is. Is it best to think about it, do some research and go slowly but surely forward or is it best to charge ahead one of the paths and see what happens? Thanks
That's great. I'd advise you to try to figure out as much as you can yourself then look for further information when you hit a major barrier. Don't just cut-and-paste (or AI-generate) code, though. That won't help you internalise your learning. Good luck! Huw
Don't get hung up on the "right" way to do things - especially when you're learning. Find SOME way of doing it and move forward. Get messy - make mistakes. When you make a mistake you find that extending the system gets harder. You start thinking "This is crazy - If I change that part so it works this way, then this part becomes trivial". That's where the real learning is.
@@simberon7751 Thanks, I appreciate that feedback. I actually noticed one of those moments today! As I'm building out any classes that feel the easiest to do, and doing basic tests to go along with it. I noticed testing my inventory system was becoming a nightmare because I had to attach locations to each item I created and then add it them to my room as well. so I just ripped out location data from the items so it's only stored either in the room or the inventory. It's suddenly much easier to test and one less thing to think about. I'm also fighting with trying to enforce correct types with python to keep track of all the different object types I'm passing around. I think I'm starting to understand why languages like c# and Java are preferred for these big OOP projects.
@@simberon7751 my previous comment didn't show so sorry if it pops up as a double post. Thanks for the encouragement, I actually had one of those moments today! I removed one thing and testing got much easier. I'm also doing my project in Python and I'm realising trying to enforce all these object types is getting quite awkward, I think I'm beginning to understand why languages like Java and C# are popular for these big OOP projects!
It's not something I have done. My feeling is that this may be handy to generate "quick fixes" (e.g. if you can't remember a sorting algorithm, maybe it can do it for you) but I don't think I would trust it with anything complex that requires careful structure, imagination and experience. I'm sure it would be great for leetcode problems. Not so great for creating truly innovative and reliable applications. 🙂
@LearnWithHuw I'm actually learning faster and better programming by interacting with it like with a coach. It aids me to find bugs faster and try figuring out say I did it this way how's would this AI do it? The quality of the response depends entirely too anyway of what you actually what you know by experience when using this generative AI.
It's all good experience. However, to learn the principles and practice of programming, I'd recommend that you also try writing programs "from the ground up". That is, without a framework such as Django. Get Python installed on your home computer and learn to write a program in pure Python. Good luck! Huw
Ex software engineer here - couldn't agree more. Learned so much trying to write assembly language on my first (ZX81) computer... not very well, but it worked!
A great way to learn (tough though 🙂 ).
Best wishes
Huw
I have to disagree a little here. During my studies, I had problems finding projects that I found really exciting. The result was that I always did some bullshit projects that somehow came to mind. It wasn't until the 4th semester that I started to find projects that really captivated me. If I had followed the instructions in this video, I would probably have dropped out of university long ago because I couldn't find anything that captivated me. The problem is that I like solving problems. But I'm not good at coming up with them.
When I first started working, I could hardly save myself from problems. Today, my list is far longer than I can work through. From scripts for automation to extensions for IDEs, I've done all kinds of things.
So, if you have a passion for programming but can't find anything that captivates you, then hang in there. Find partners and solve their problems together until you stumble upon something that captivates you. If you only chose the subject because of the supposedly good salary, believe me, it's not worth it. Otherwise, have fun.
What you do now?
Im an engineering student pursuing a cs degree, i never written a code before im in my first year and learning c and cpp, any suggestions
@@ashrithreallyashrith6875 Yes. Think of something you really *really* want to program. You can start small (it doesn't have to be a huge program) but be ambitious.
Good luck.
Huw
To the point. What many of us already know and yet here we are watching a video telling us, hoping it was something else we didn't know. Thank you.
Sometimes it helps all of us to be reminded of something we already knew, I think!
Thanks for the comment.
I did not know :)
@@franciscobautista3158what changed now that you do?
@@LearnWithHuw
Sir, I have come to realize a couple of things, after working my butt of in this IT field.
First is, everybody all knows something is right or wrong, but they always end up doing the wrong things anyway. I don't know why that is, I just know that it is the "trend" now. And the vast majority of people always do this, myself included.
Second, is that exercises and assignments are "Good" if you want to "impress" the employers, in a general way. Because, employers always give you assignment and exercises.
However, the real projects do not work like that, at all. In fact, even companies don't work like that. When it comes to real projects, you always have to fix the code of the previous developers(Who already quit the job), and it is a huge mess to deal with. Doing exercises and assignment will not train you on how to fix that.
Third, in my opinion, just go to github, clone a project, then work on top of that project by building more and more features that you can think of.
I think that's more efficient than practicing exercises. Courses are full of exercises and stuff, yet, I have seen guys who can't program after getting done with the courses.
The best way to me, is either build something on top of the already existing projects(There are tons of them on github), or learn by interacting with your friends, and both will check each other's mistakes to correct them.
yes but no. it's not about exercises or tutorial. its about specialize. you dig deep into a specific or two-three specific languages.
tutorials enable the ground work. you want a .NET backend, Angular frontend app. here's a limited version. you want to make a nextjs app with authentication and use APIs and services ? here you go.
want to learn cloud like azure, aws or google? here you got an app or similar use these to build something solid. now you got your feet wet. time to continue if you like. 😂
Just want to add that exercises ARE useful at the beginning of learning to program to get practice with the different structures and learn their semantics. After that, bigger programs are mich more useful
I couldn't agree more. I started learning python about a month ago. I'm a dad and I work. I'm at a point where I'm just going through exercises and their solutions cos I'm still trying to wrap my head around some of the basics. I'm hoping that a few months from now, I'll have the confidence (and courage) to tackle more serious problems. 🙂
I think this explains why it may sometimes be difficult to grasp explanation of an algorithm or understand certain data structures until you actually use them in building applications with real world use cases.
Writing games is the best way to learn programming or improve at it. This is just an axiom at this point. And the worst-leetcode and a corporate job.
Dear youngsters, if you dream about perks and a job @ FAANG and not about all those cool apps/frameworks you invent, please don't torture yourself/your code reviewers. Just start climbing the corporate ladder right away instead of doing precisely that only ten years later.
I started a program in 2015 , it was a tool that generated normal maps through regular color textures.
Today , it's a 3D application with a pbr viewer that takes a scene and bakes it using various path tracing methods, with also a pseudo realtime raytracing viewer , and distributed on gpu using cuda.
not only it skyrocketed my C++/OpenGL/Cuda skills , but it taught me CMake , build configurations , avoiding circular dependencies , proper interfacing of modules , reduction of dependencies using various methods like pimpl, and dependency injections , unit testing , python/bash scripting for downloading + building custom libraries and integrating them into the main project, SIMD , multi threading , QT UI , and will probably add a bit of networking to distribute computation across multiple devices, proper architecture for a path tracing engine , performance optimization by ditching the virtual method dispatch and replacing it with static polymorphism .
But hey ... companies want people solving leet code instead those dumb morons lol
Because leetcode-style problems are easy to assess in a short time (time is critical in recruiting). Also selected for smart, driven people willing to jump through hoops too.
Being good at Data Structure and Algorithms (DSA) is a strong indicator that you will be able to learn and be good at anything else. Besides it is precisely DSA that built the foundation of all those optimizations you used in the very first place. What companies want is not people who can use tools, but people who deeply understand tools, in order further those tools and create new ones.
I think a better way to put this is to work on projects, not code challenges if I'm understanding you right. My university focuses a lot on projects, like file system explorers, games, compiler, etc. Those kinds of assignments are wildly useful.
Oh, I agree. If they are encouraging you to develop fully-fledged programs that's a lot different (and much better) than the typical "coding assignments" that people spend so much time on.
From my perspective, as soon as I understood Input, Processing, and Output, and the fact that Information Technology is all about storing, manipulating and displaying information, programming became more and more fun. Logic is also important.
Fun fact is that you don't have to cram the syntax, that's what docs are for. Just sketch, or visualize your output then figure out your input and how you'll manipulate that input to form your output.
Example: I want to register a student to my system. First thing, I will visualize my output, maybe a form to collect the student's information. Then I will model the student's information (data) to store it programmatically. Then once that has been stored in my database, the rest is to display it whenever it's needed.
The stepping stone to being a good programmer is to understand the language fundamentals. You can't write large programs without that. And so learn to solve the small problems the teacher gives you and then advance to complex programs
As a Counterpoint to this opinion: all large programs consist of many, many small programs, and you can learn the language better by being motivated throughout because you have something that you really want to do. That's very hard to feel for small problems. I think the mindset that thrives on small problems is much more of a mathematical mindset.
@@LiterateProgramming as a counter counterpoint think of all that you'll learn by building an entire house without learning anything about wiring, plumbing, pouring concrete, or industry standards related to building safety. i think this is a ridiculous mindset that sounds profound on the surface but is a facade for gatekeeping a skill set from a wide range of people who could learn it methodically, on behalf of a bunch of elitists who believe you should just be smart enough to grasp it as a whole and muddle your way through until it clicks.
@@stegwise I didn't suggest that one could do without learning the material methodically by building it up from first principles, with many small examples etc. I did not suggest replacing the entire class or learning experience by a large project - but based on my experience, except a small elite of people already dedicated to programming, the large number of students (these days) will not experiment, they do not appreciate method, and they might have to be lured into the belly of the beast. Granted, many of these probably shouldn't be programming in the first place. I also agree with your summarizing comment though that's not what I was advocating. The name of my UA-cam channel kind of gives that away: "Literate Programming" is not for the faint-hearted or the weak-willed, and it is the opposite of "muddling through ... until it clicks" - it's structured, methodical, modular and mindful of both the human and the machine. I picked it up as a graduate student a long time ago, and it saved me from tinkering.
Couldn't agree more. Nobody writes a complicated program on their 1st day of a computer science degree. You need to understand the fundamentals first.
No you only learn programming fundamentals to their core, through large projects.
Couldn't agree more! When I stated programming in the 80s, I learned the basics (BASIC and 6502 machine code) from home computer magazines. And then I got really curious about computer graphics, particularly 2D platforms games like I used to watch people play in the arcades. I wanted to recreate my own version at home. We didn't have UA-cam or websites, we had to figure out algorithms all by ourselves, and self learn about compilers, memory and CPU architectures to optimize code for speedy execution.
That's how I became a programmer, and everything I learned took me on to a professional software developer career.
Yes, that's right. It's great to have so much information a mouse-click away on UA-cam and the Internet but the only *real* learning has to be done the way it always was done.
Best wishes
Huw
I was asked if I wane do a degree in programming in at a university. I'm glad I didn't subscribed to that advice. My plan get the basics on a platform like solo learn. Python and c++. See what it can offer and go wild
I do agree that project help. But I would say start by programming a command line project. Once you master that you can than move on to learning about GUI and building a GUI project. Biggest thing is to know how data is transferred across many file or classes. This depends on the language you are learning.
Okay, but I have the opposite problem. I have worked on too many projects before understanding data structures and algorithms, and other significant things. University is actually useful to me, it has improved my logical thinking tremendously.
I largely agree with your sentiment. Certainly you don't become an engineer without doing any engineering... But exercises can be useful too. The exercises in casey muratoris performance aware programming series, for example, seem fairly well considered. It depends entirely on the objective of the material. If you're trying to familiarise somebody with fundamentals of formal grammars, or more importantly, trying to introduce a process such as how to take a piece of logic and achieve that same thing but faster, or how to use a debugger to observe the logic as it's executing and observe as the programs state changes over the time, then exercises can be particularly useful. More so, probably, than trying to learn such procedures and methods on arbitrary logic. I think beginners and people trying to gain insight into something new should begin with exercises. But I definitely agree it's no substitute for then putting that knowledge into real world application. It's like training muscles in isolation instead of training the body as a whole.
But this is at the core of why everybody says they learned everything on the job. Or why people say they learned so much from their first real world project.
But then deliberate practice is also a thing. And that's pretty essential.
I agree that writing real programs is critically important, as is _reading_ real programs (perhaps even more so), but exercises are not completely useless. All forms of practice will help you improve your craft, and it's much more important that you practice than how you practice. Most students spend all day on instagram, reddit, tiktok, etc. and that is their true downfall. In order to learn programming, you need to actually program, who knew!?
Agree. I started really learning when I began writing projects for various purposes.
I started programming in the early 1980s. My first program drew a solid filled circle on the screen based on the size and color provided by the user. My second program was a checkbook balancer/budget tracker. It too had tens of thousands of lines of code. I had no idea what was doing and I failed a lot, but I learned way more by building an actual application than I have through any other methods.
Absolutely. You have to be over-ambitious and you have to fail in order to learn.
Best wishes
Huw
What a gem this video is! This should be an obvious fact yet this is so profound! Been wondering about the best way to learn coding/programming and there's just too many advices out there but this piece of advice just solidified and confirmed that I'm on the right track of learning. Keep creating man!
Thank you so much. I'm glad you found it useful. Good luck with your projects.
Huw
Writing own programs is just a prerequisite I would say. It's like learning a foreign language just by speaking. Reading, analysing and understanding an existing code written by other programmers is the next level of mastering. And the final milestone to become a programmer is contribution to existing projects, fixing bugs, design and development new features. Thanks to open source everybody can easily learn all of those elements. 🙂
This is excellent advice, and I am saying this as a college professor who is trying to force his students to solve small exercises but, I must admit, mostly fails, because the students can't get interested. Myself, I learnt programming like you: I was a young physicist and had to write a massive C++ library. I had already experienced the thrill of large programs during an internship when I had to debug a massive rocket science program. I will use this as an inspiration to change my teaching from small exercises to large (literate) programming term projects.
That is amazing, I am sure most of you old school developers are way beyond us with stack overflow being a click away. We got lazy having those solutions. I sadly forgot half of what I learned in college though I had a great GPA, so I am focusing on real-life projects, system design and sometimes Leetcode tasks, since bigger companies like to give them. I didn't have a need to use data structures besides arrays and maps in Android development but I decided to go into enterprise development and hopefully swe, so everything really helps. I feel strange because I am interested in many things and have many hobbies but also feel good solving complex problems. I wish I could have two half-time jobs but freelancing is too volatile and unpredictable
I totally agree with that point. As you start programming for a big project you face many problems that would multiply your learning speed instead of making some slow progress by just solving some simple coding exercises.
Kids don’t want to be rock stars anymore because they don’t listen to rock music. Everyone wants to be a billionaire youtuber tech ceo nowadays.
how i wish i became a musician than in front of a computer typing with my back aching
@@1Lll_llllllLLLLllllll_llL1 i have two degrees in music and cant find a job. ive been trying to study code and ive got one thing on Github, but i have yet to make a full website. my back aches because im fat. i did the music thing when i was hip and cool. now i dont know what to do as im aging...... you wish you were a musician.... i wish i was a programmer. go figure lmao
i fully agree. I am currently learning Python, i’m pretty much a newbie based on my standards, but thinking with your own head is the key to being a programmer. An exercise will only make you able to create something someone else wanted you to make.
There is another great benefit to writing whole programs: you have to learn how to create a "structure" for the code, one that is understandable, reliable and maintainable. This is something that you can never learn from coding exercises.
As a college student learning programming, I do agree. In order to do so though you have to learn how to understand documentation and APIs. THAT would be a good course any beginner programmer would learn from.
Also, learn how to debug and write code that makes debugging easier. This is a vital skill that many programmers overlook.
I would say that it is true but exercises can teach u concepts and practices that u wouldn't learn Attempting everything on ur own hands on coding is more beneficial but exercises have benefits too
You are absolutely right! I agree with you 100% 😊🎉
Huw's a fantastic name, mate.
Great video, too.
I, like many others (id wager) have been looking for 'exercises' to practice to make coding a breeze. I envisioned 'wax on, wax off' type drills to make me a great programmer without any effort.
There are no shortcuts to success, anyone saying otherwise will try and put their hand in your pocket.
Many thanks. I'm always pleased when someone can take just one useful idea from one of my videos.
Best wishes
Huw
Agree, but ability to write programs comes after learning basics.
Agree 100% - makes total sense to me.
If you are in any way interested in programming, you will have no problem at all finding significant projects to work on!
Absolutely. Thanks for the comment.
You're absolutely right! I'm a self taught programmer. When you think like a programmer you don't have any problem finding programming tasks.
Your hard drive is full of doublets of files? Write a program! You have to produce a series of letters with a given skeleton but some changing passages? Write a program! You want to show what company near you have service times when you are closed? Write a program!
For me it's not the problem to find a task. I'm never happy with my programs they have to be refactored, bugs occur I never thought of (the SD card of my pi was trashed full of log files so my program refused to run). Often I see my code and think: too complicated, ugly, messy! I'm never finished!
Before getting into programming I didn't like messing with computers in general but now I also sometimes write bash commands to make my life easier, like deleting a bunch of json files downloaded via google drive exports. Still, I had a bad experience with Linux in college (since I installed it on a VM which ran out of memory a loot) and was lazy back then in terms of actually writing code, not only learning concepts and solving things in my head/on paper 😅 Now after some professional experience I mostly believe practice is better, though I still challenge myself with Leetcode (and this makes me more ready for a potential swe role, 'cause big companies swear on it 😅)
Sir, You are the best.
Your honesty is helpful.
Thank you!
I couldn't agree with you more on this. You hit the nail right on the head. That's great indeed!
Many thanks.
I will keep working in my engine, thank you. ❤
Just my cents on this topic , you could have been more clear and emphasis that you mean leet code sort of questions.
A better way to put it would be like - you can solve small problems but keep a big picture in mind on how you would apply those data structures to your problems.
The way I see programming is like abstractions.
You solve problems and build projects by fitting those abstractions on those problems.
As someone else said, its also about storing and managing data.
It reminds me of legos for some reason.
Please if you disagree kindly add your opinions, I would love to hear them.
Ah, another thing, theres not much room for ego. I mean, its better to keep that aside and take everything as a learning opportunity
No one knows everything, and when it comes to algorithms as an author once said, you can't be satisfied and think thats the best it can be. Theres always room for improvements.
Totally agree with you. I started programming in the 80s with BASIC, then with DBASE and FoxBase, in my country at time internet was very limited and no online documentation, just books. No windows, just DOS.
It's impossible for modern learners to do that now, I think. It takes discipline to work things out rather than Googling. But it's a discipline worth acquiring!
Best wishes
Huw
I loved your c programming language course. It was really beneficial and interesting. Thank You 😊 🙏🏽
That's very kind of you to say so. I'm glad it was useful.
Best wishes
Huw
Just want to say, a a beginner myself, that i think exercises and assignments are crucial for beginners to really get a hold of the basic. But within a couple months (or weeks), one should be able to delve into attempting more serious programs.
Thank you.
I think a better plan would be to build a tool. Build a small program that does something useful, but that you can extend. There's no real danger that you won't be able to make your program bigger. The danger is that you won't be able to break it into composable pieces that you can reuse. So, starting with a smaller tool, first, means you can complete a working product, which is a sizable achievement in itself in coding, and that you can think about how components work together, which is the grand slam of learning coding. Composability is systems thinking.
When I learnt programming I would do the exercises and then turn them in-to real world programmes, this was frowned upon, but I kept doing it my way and as you have pointed out you learn so much more.
That's a very good way of tackling he problem. Anyone who feels weighed down by exercises and assignments should do exactly that!
Many thanks for the comment.
Huw
Us GenX kids had a big advantage when it came to HAVING to code. Because here you had your expensive micro and you turned it on and it said either READY or OK. And you were in basic which basically did nothing until you build something. And luckily the games were not very exceptional so indeed (Same here) you started to build your own games or crack existing ones to make them easier. Those two things, for me were more valuable than 4 years of college. The only new thing I saw in college was Unix (which I adore to this day) and C which I love but now I’m going with younger mistress called Zig. C was like: “this is as fast as my assembly and almost as small and it’s quicker to build things.”
And to this day I often just build another puzzle game or shooter. Mainly puzzle games because I like those
I would love to make a micro OS for embedded systems. Going back to my college years where we did OS design and implementation but on an old Z80 doing it on a RiscV would be nice.
That prompt was an invitation to write something. It was full of possibility.
@@JohnnysCoolStuff absolute! ❤️
this video is absolutely a gem! Great advice. The analogy of programmer and musician was insightful and made me think what would I like to work on really. I usually say I don't know what to code and ask for ideas because I implicitly was thinking to myself what can I program right now with my skills that I can see end to end how to do. But this video made me think outside my current abilities and just focus on what do i find interesting and what would i like to be able to program and realize that it would stretch me and force me to learn things which is great. Just like with music, a musician hears a song and they just have to play it and learn it and they get to it and they find it makes them do things they can't do presently.
I love all of this but I have a question. What or how do you go about programming something that is way outside your current knowledge and abilities? You wouldn't know the roadmap on what to do to get to the end goal. I love converters and would really like to make a converter that could take a epub file and make it a pdf. I use these all the time. But I have no clue how to make one. Or I would love a program that would automatically click the skip ad button on youtube videos and even better is just mute and black out the screen during ads. But I have no clue how to do that either or where to start researching. Do you have advice on how to about building software that does something you have no clue where to start? Thanks. I think someone who could mentor a programmer on their projects would be super cool. So if you wanted to do 1:1 mentoring where you have a introductory call and hear the project idea and you know what the person needs to do, then they could pay you to mentor them and build out a roadmap on how to accomplish their software goal. That is something I would pay for to save me time having to research so much. And then it might be that after that I know enough how to research on my own for projects that are in the same domain. But yeah if i am just starting out on my first project that is I/O device programming heavy and I don't realize that, then paying someone for that first mentoring would be good and then other I/O projects would be easier since I have enough fundamental knowledge of that domain. Then if I had a project that was OS heavy and didn't realize it, another mentorship cycle would be good for that.
Thank you. I can't advise in detail on a specific project goal. As a general principle, though, I'd say that if you feel a project is beyond your present ability, break it down into parts and start with the part you think seems most approachable. Then gradually build towards the more complex elements.
I'll put another video online soon that tries to offer a few ideas on this.
Good luck!
Huw
This is a real good advice! couldn't agree more
Many thanks.
I know html, css and some gml for gamemaker. Since I struggle a lot with gml I decided to learn c. I’m currently watching a 4 hr video of brocode to get started with c and after that I will write a text adventure game. Glad I clicked on this video it makes me confident in learning it.
C is quite a challenging language so be prepared for setbacks. However, once you know C, other languages are much less intimidating.
Good luck!
I still remembered when i wrote a metronome program in foxpro on dos when i was a kid, just finding how to beep the tempo correctly took a long hours. I am still programming as a hobby to make a program of something i am interested, it may be big or small, some finished and some don't, but i have learned things steadily.
Ah, making the computer beep! 🙂 I too went through the excitement of discovering that.
I'm trying to expand my knowledge in a new area - Python programming. Also, I like django and already completed two or three really big courses which were supposed to teach me how to create django apps. But, instead, when I've started my own project, I've burned out, felt like I've learned nothing. And in time left this idea. Now, I'm starting for the 3rd time. I've already refreshed Python with one of the specialization course which was good - overall refresh of basic Python language structure. And now, I'm starting again, my new project. And I hope that this time I'm not going to let go but keep it pushing until MVP and then add extra functions layer by layer. Thank you for this short and important message - to dig into my own "passionate project" not another django course. BTW: I'm also learning to play drums! I want to be a rockstar and I'm learning rock grooves&fills ha ha ha :D
Keep at it! If you hit a barrier or get bored, go and play those drums then come back to programming when you feel more positive. Make sure you don't get so frustrated that it stops being fun. Good luck!
But programming exercises are the building blocks don't forge that
I dont think you HAVE to know what to program. Its okay to not have any ideas, but you should at least be somewhat confident those ideas will appear eventually. Sometimes it better to choose your projects wisely.
I partially agree, but a lot of assignments are training you how to think logically. Learning a proof for why merge sort is O(n log n) isn’t really useful to building a crud app but is useful, however, for training you how to think in small steps.
Thank you so much for the advice. It gave me motivation to make a project
Excellent. Go for it!
Awesome advice. Thank you for this video.
Many thanks
I wholeheartedly agree. If I wasn't already itching to write my own big programs, I wouldn't have the passion needed to succeed.
Spot on. I completely agree.
TOTALLY AGREE!!!!!!!!!!!!!!!!!!!!!!!!
...I am a recently retired programmer/engineer.
btw, my second program was similar to you and it was I HUGE learning experience!!!!!!!!!!
When you write big code you learn VERY QUICLEY to structure you code, but sadly most programmers today SUCK at it!
@@stevenbliss989 That's so true. And yet from the comments I can see so many people who are resistant to that idea. I always encourage people to be ambitious beyond their current skill level. That's when the hard-core learning begins!
Thank you! I could not agree more.
Many thanks.
I'm making games, too. A virtual card game. Its taught me a lot, so far.
Thank God for LLM's. Any question is quickly answered, but I try not to copy-paste
The more you figure out yourself, the faster you'll learn. Good luck!
I didn't see anyone who was bad at axercise and was a very good programmer. So we need to do some exercise sometimes to be in the shape .
I'm an AI development manager of 5 years and an indie game dev contractor of 6 years. Never have I ever memorised a single algorithm or done any stupid leetcode crap. I also have a degree in game tech and a masters in cgi. Still didn't need to do all that stuff. I learned all my most important lessons by actually building things. When I wanted to learn a new language I just think of a game or app to develop with that language or tech stack and after all the struggles and hurdles I come out the other end of the project now actually understanding a new language or framework. Ignore these UA-cam leetcode gimps.
That's the Real-world v Theory. There really is no substitute for, as you say, "actually building things". I still find it surprising that some people argue against that. Many thanks for your comment.
Unfortunately a lot of the tech companies want you to solve leetcode questions.
If you are new to programming and don't know fundamentals, you don't just dive right into big programs.
For example you want to make a tic tac toe game, people who has never coded in their life aren't gonna say hmmm I need a for loop here and a list.
Some people really live in a fantasy world on UA-cam
The only programming advice I really need right now, thank you! 😂
Excellent. Good luck with whatever you are programming! 🙂
I agree with you about the exercises. How many times can you write a converter or a lunar lander? Those projects are for the basics like IPO charts, flowcharts and converting logic to algorithms. When I think back, writing a MS Paint rip-off in C++ is where I realized what coding really involved. I loved the idea of having to research the graphics code. Heck, it makes me want to write something I haven't right now.
You are also remembering the excitement of creating real programs. That is another thing that students miss when they confine their efforts to solving exercises. The burning enthusiasm to write programs needs to be instilled at as early a stage as possible (in my view).
Best wishes
Huw
@@LearnWithHuw I completely agree.
Im an engineering student pursuing a cs degree, i never written a code before im in my first year and learning c and cpp, any suggestions
I agree writing programs is the best way to learn programming. However, the unfortunate reality of getting a programming job, especially FAANG / Big Tech and startup jobs, is you have to learn how to solve medium to hard Leetcode style programming problems in 30 to 45 minutes (possibly via whiteboard) because companies use those types of problems to filter candidates.
I was about to say that. No matter how many and impressive projects you build, if you cant solve problems you are given in the hiring process you cant get a job.
This is the motivation that I needed. Thank you
I'm very pleased to have helped. Good luck!
I think you can do both exercises and projects involving bigger programs
True talk. Over 20 years software development experience (in loads of languages) says; "he is bang on the money" ==> best way to learn to program is by programming 🙂🙂
Many thanks.
I am a student in my final degree of CS bachelors in France .
I respect your opinion
because i did SO many projects during my curriculum and all of them were failed ones. I mean yes we created apps we choosed even games that were composed of small exercices .. but .. never worked !
I had like a trauma of big projects
that didn't work
I mean , whenever the exercices' scale grew bigger and algorithms got complicated, they became more difficult for me to make them work and I feel I'm lost !
But what I learnt from the experience is exercices that work are just like small programs
And a programmer must relate to them in some way and never get scared of the size of the project or how it is unrelated to them !
In that regards , I advise students that face my problems to start and see big programs as small exercices ! I discovered by experience for example this year that trying to document a code you've written makes you detect why it isn't working and makes it seem like it's a small exercice you have just solved ! I am trying to take advantage of this strategy and this seems like it is starting to work and makes big code seems like smaller programs
Never start from zero and always be a detective
Because a programmer is a detective!
He tries to find the patterns in all programs And creates a reasoning that is easy for him to understand, manage and maintain
Never be scared to ask for help , take advantage from others' help
In the same time , analyse , understand
And test , test , test !
The problem is smaller than you think
And taking others' code especially if it's more beautiful or elegant or simply works is OK !
However Never understanding the pattern behind it won't make you a real programmer
Sounds like a planning issue. Writing code is a very small part of it. The rest is planning and solutioning. Harder to get lost if you have things broken into users stories and focus on mvps.
@@bertski7950 the time you replied I was already in the peak of my sufferings because of my ancient method in parallel programming xD
Really one must plan before writing code the less modifications done on the actual code ( try and error xD ) the better
It's like imagining the code being executed before It's even tested
Testing should really be a verification that the code works rather than the main concern
Thanks again for your tip it came in a good time xD
If you are new to coding, write this - you have a cube (rocket) and horizontal line (land), client should be able to pick fuel type and planet, both have different take off patern , on "up" key rocket should take off accordingly. Happy coding :)
I was teaching programming at a university for applied sciences for 5 years. In every semester, I recommended to choose your favourite Arcade Game (Pac Man, Frogger, Asteroids, whatever) and while I teach some math and coding concepts you go on with your project, that's the only homework. Those who did, evolved fine. Oh, I forgot: When I see a certain lack of skills for a student, then I keep him a certain exercise, just him. Plus: I fill that gap for everybody in the lecture (often, he's not the only one with that gap)
Sounds like a great way of teaching. Your students struck lucky! 🙂
You’re absolutely right. I did a full degree and fortunately got a good job because I was good at coding challenges, but quickly realized I couldn’t build an application or write production code worth crap. I basically had to learn everything from scratch. University classes should be having students build functional software to learn, not just writing code to implement some algorithm 90% of students will never touch again.
I can see from some comments that are pro-example-solving that people are thinking "how can i pass tests to get my first job" rather than "how can I build a career as a really good programmer". The fixation on passing tests is really counterproductive.
Thanks for your comment.
Huw
This was my biggest issue with my coursework in university. I wanted to make projects and my professors wanted vocab tests and reinventing the wheel types of assignments.
That must be very frustrating.
Have been a BASIC, assembly language, COBOL programmer back in the 1980s and 1990s. Now working with ExtJS, PostgreSQL, Delphi, PHP. To be honest, I can barely imagine, what programs I want to write for self education. The 65536th kanban board? Another bug tracker? Wait. There is one exception. Sometimes I feel like programming technical stuff like PID controllers in C on STM32.
Creatively different and simple...thanks
Thank you.
Having taken both approaches I agree and disagree. I'm new and as much as programming something like a MUD server is more fun, I start banging my head against a wall.
If I want to get better at things like data science or machine learning, it's going to take me learning the math skills and implementations exercises offer, since I don't come from a math background.
It's the difference between exercising and using your body to do practical things. Both serve their purpose in tuning your abilities.
That being said, I still agree working on programs is overall the more valuable experience.
Can't agree more. I am by education majored in Artificial intelligence and Data Science. But I'm very curious about software engineering. I started to make softwares (mostly web based) for petroleums and similar businesses. I started to make them for free first to learn, and once I got the hang of it, I started to charge. I don't like front end and designing, hence, I save time by asking gpt to improve designs. Because let's be real, leetcode is boring, and doesn't teach software engineering. Good for a little mind exercise sometimes, but not useful, you'd get experience from projects, and leetcode gives no experience.
Thanks. I get the feeling that a lot of people are learning to "pass" leetcode tests rather than learning to write real programs. Of course, doing both is possible but writing programs is the better learning experience.
Thanks for your comment.
Huw
I’ve done some exercises to get familiar with the language, C mostly. From that I got the insight I needed to finally start to make a program. I do have a game in mind which is a card game using AI machine learning to train NPC’s . But it’s about to get so complicated now I’m about stop understanding what’ve done and why it works so far.
If a problem seems too complicated, break it down into smaller parts. Programs that seem too complicated usually are trying to do too much too quickly! Good luck.
@@LearnWithHuw
Thanks for the tip.
Hello, I started programming out of necessity, because I was not satisfied with the solutions on the software market, however I must say that learning from experience has a small problem, namely you can find that you have certain "knowledge gaps" which theoretically a well-structured course should cover.
I have nothing against well structured courses (I teach several myself! 🙂). However, knowledge is only theoretical until you put into use. In my view, the *real* learning happens when people create programs of their own. If they have to fill gaps along the way, they will learn and remember far more than they would merely by studying isolated problems with model solutions.
Best wishes
Huw
I learned to program by writing a web app used by 30 people, completely agree that a small program is different large program, cause it requires you to think deeply about architecture and stuff
Totally agree.
The rockstar line hit different
I am learning web development, we used to solve those coding exercises, and when i tried to do some real world challenges i was lost. I had to go and learn a lot more.
That's when the "real world" hits you. At least, you survived the challenge!
Best wishes
Huw
@@LearnWithHuw yeah exactly, i was shocked and excited cuz i found out that bugs and errors are the best teachers... And docs obviously 😅.
Thanks for your wisdom.
Thank you.
i am not a programmer but i love programming on my own desire, the importante things are only 2, just define the initials and update the initials thats it, functions are just way to manipulate the initials so you can get the final output. and thats it
Can I watch project from UA-cam and learn programming
Learning should ideally be a combination of watching (or reading) on the subject and actually sitting down at your computer and writing programs. You need some of both but it's when you write programs yourself that you will learn the most!
I want to see this man teach a beginner in programming, code complex programs right away without using exercises and/or problems. If he cannot then he should not say that his theory is the "only way" to learn programming.
If you follow any of my courses or read any of my books, your wish will be granted. 🙂
@@LearnWithHuw Thank you for your response. But I haven't seen in my entire life of someone who become a good programmer who started building complex program right away. This is from a guy who have been teaching programming for the last 15 years or so. And I have a lot of students who become senior programmers or working as lead in medium size to large software company. But they all started learning the basics through exercises before building complex ones. I am also teaching on a country right now wherein kids come into college without even having seen a single programming code let alone write one. Sure building complex stuff will speed up your programming skills. But claiming that building complex program right away for a new programmer is the only way to learn programming is just silly. And please don't sell me books so that I will learn your stuff...lol
@@EdperCastro You clearly haven't met as many programmers as I have! 🙂
Best wishes
Huw
@@LearnWithHuwHi there!
Is this advice for more intermediate programmers, or for beginners too, if so, what projects do they work on? I teach Python, so I’d really appreciate some coding project ideas my students can do, my teaching method is very hands on, I start from small exercise then do projects based on their level.
@@AayaatAlakhras-Codegirls I think beginners can be guided through moderately large projects as long as they take it a small bit at a time. Watch out for a "code along" video I'll publish later this week. This will guide a beginner through the process of writing an adventure game. The first lesson is just one class: a Room. But once they've coded that it's a short hop to an entire map. Each step introduces 1 or 2 new ideas and soon they are building a *real* program rather than learning techniques and syntax one (unrelated) problem at a time. I think most people get much more satisfaction from creating fairly big programs than they do from solving coding exercises but that doesn't mean that they don't learn all the same skills along the way.
(Anyway, that's how I see it!)
Best wishes
Huw
This video has made me realise that I have no genuine interest in coding. What I was interested in was the high salary and the potential to be able to boast that I worked for a faang company.
People who have a genuine interest can't help but tinker for hours daily on some project. It Is something that consumes most of their thoughts.
If you like me have jumped about from say Java, to Django, to Flask, to JavaScript. From wanting to be a front end developer, then switching to backend, then back to front end then trying full-stack , then MERN and you either haven't the slightest idea how to start a project or your idea is so basic it wouldn't impress a small child never mind an employer then programming is not for you. Find something you genuinely love doing and see if you can do it for a living.
Programming certainly isn't for everyone. Maybe you'll rekindle your interest later on. If not, I hope you find some other skill that really does excite you.
Best wishes
Huw
Agree totally. I'm writing a multibody/constraint race car simulator now. It's a multithreaded DirectX 12 with my own physics engine using a direct solver with intrinsics. I've written multiple engines and have seven released racing sim titles under my belt. The number of Leet or other code exercises I've done in my 25 or so year career: Zero. I've just never seen the point.
Good luck with the car simulator. Sounds impressive. And definitely a lot more interesting than coding exercises! 🙂
Wise talk sir just like my college professor always say ❤
It's good to know someone agrees with me! 😁
Thanks for the comment.
Huw
90% of all corporate programmers end up writing programms that other people thought of. That's the job of a software engineer.
If you're learning, what "big complicated" programs should they write? If you find that tinkering with mechanics is your thing, you start with a bike or a soapbox car and not a real one. That is overwhelming.
Many Rockstars also don't write their own songs.
Also, you can write programs that actually work easily. The point of the exercises is to show the stuff that is necessary to a programm but not actually for its core function.
If your only goal is a "working" peogramm you'll get one. With vulnerabilities and bugs. Among the most famous ones: sql injections.
But sure, don't give them simple tasks that they can write in a week. Ask them what programs they want to write and let them try it when they say "a real time video chat" when you know, they barely manage to write a file manager.
A big WISDOM thank you sir ❤❤❤
Thank you.
So your suggestion is project-based learning?
Absolutely. Set your ambitions high! 🙂
Hey Huw,
I agree, typing out line and lines of BASIC published in the computing monthly magazine or from code books. No fun and no appreciation of the lessons. This is a sound piece of info that your subscribers have over the competition. I myself did what you describe (built programs (small & large) that tie multiple things together like [guis, I/O, threads, processes...]. Though having you point it out was the first I knew about it being such a benefit.
I also think learning how to describe your project in common language is now also just as important as tackling the coding challenges? After all, how do you test it if you can't describe it? :-)
Have you done any of your games using TDD?
Thanks for the comment. I don't use any formal testing methodologies. What I do is write a script that automatically inputs a series of commands to "play" the game from stat to finish so that I can be sure I haven't messed something up accidentally.
Best wishes
Huw
Let me understand this more, First i should learn how the programming works from reading books or watching tutriols, and then work on a gudied project or a non-guided project and just do every bits myself if i stuck i go to read the part in books and solve it and move to next part or ... altogether should i just find a project and start it learning my way in and out of it without any initals concept and let myself be indulge with all the knowdlege there just move on with it.
Programming is a hands-on activity so you can learn theoretically (reading and watching tutorials) while simultaneously working on a project of your own. Give it a go!
Best wishes
Huw
100% agree. Solving little code puzzles is an entirely separate endeavor from writing actual software. Judging a potential employee based on one or two randomly chosen puzzles is a meaningless waste of time. It leaves the interview process wide open to personal bias, racism, and ageism.
It also leads people to confuse "passing tests" with "understanding how to program". Two very different things.
Saying that they're a complete waste of time it's probably NOT UNDERSTANDING the purpose of them.
The real mistake is to think that they're intended to make you a "great programmer", and of course, in the whole sense of what that implies, they're not capable of providing that.
They're INCREDIBLY USEFUL to learn, acquire, or even master a few aspects of programming that otherwise would be harder to acquire just by creating "real life programs". They're a shortcut to many people that need to have a quick exposure to punctual things, to be then able to continue advancing in their learning path.
Probably they're overestimated by some people (and companies asking to have a stupidly strong fundation on them), that's true. But if you're a student acquiring the bases of programming, giving them a few months is a great investment.
No harm in doing them *in addition* to writing complete programs. But exercises do not make a good *substitute* for that.
Best wishes
Huw
@@LearnWithHuw Agree! Being involved in comprehensive processes such as writing complete programs must be the priority. They serve as a supplement to the overall process.
I think companies are, in part, responsible for giving them such a limelight place... Frankly, I don't know why, when a good professional's skill set extends far beyond that single aspect.
keep it up❤
Thanks.
Good perspective! But not realistic! Beginners can't just start with big programs! It's like asking a neophyte mathematician to try to prove Goldbach's conjecture. Where will they even start? For self learners, exercises and coding challenges are like formative assessments in the academic world and serve the purpose of skills and confidence building. Programs and projects are summative, as self confirmation of their ability to handle more and more complex programs. Should one only do exercises and drills? Obviously not. But it is difficult to think someone would be able to handle anything remotely complex without a good grounding (the different data structures and algorithms, the ability to decompose problems, readable coding, good use of documentation, proper testing, etc...) Writing a mess that somehow work to some extent without knowing how to inspect and improve it is not a good way to learn programming. What would work best: getting the fundamentals with drills and targeted projects, then moving on to mostly projects (progressively larger and complex while also reading others code of similarly complex projects), finally using one's creativity to come up with interesting app ideas and implementing them.
All I can say for certain is this is how I learnt. 🙂
This is wat I do, I watch tutorial in one dynamic language and write it in a static language.
I'm a professional programmer of 20 yrs still needed to hear this lol
Ha! Well, I'm glad to help out! 😂
Best wishes
Huw
To be fair, I get what you Sir are trying to say...but its a quite rude and offensive saying "Maybe then you are in the wrong profession", which genuinely sounds like my CS Uni profs that I would describe as "neurotic old grandpas" if you catch my drift...
I say that because I find myself struggling with "what should I program exactly?". In a world where nearly everthing already exists as it is, it feels lame and difficult to find something that would be worth pursuing, in a way that would either be a great "passion project" that might grow into something more (perhaps even a sellable product?) or just "to have something to show for" when trying to switch sub-fields (say from boring FinTech to Graphics-related programming such as game development etc).
But this does not come about easily...so its a bit heavy-worded I'd say...
Nobody asks you to invent some new and amazing product to sell - or to have impressive portfolios that demonstrate your vast knowledge in some domain. Just to program something you'd like to program. Like a musician learning to play an instrument - he isn't trying to compose some amazing symphony that will impress the entire industry and make him a billionaire, he is just trying to learn how to play his own favourite songs!
@@peterlinddk I don't see why my point would not be valid here...the "favourite song" analogy should actually be on the same level as "a passion project", take "Manor Lords"(the game) as an example...not everybody come up with something that would make * click * in their heads and have at the very least a genuine starting point before engaging in some initial sketches/designs before then embarking on the "making a program" prat of his speech...
Also the "to invent"-part is a completely unnecessary sentence, as I have not suggested to "build the next big thing" or any nonsense like that...
I'd say writing your own Tiny BASIC compiler is a good start! You know it's easy. You know it's impressive. More importantly, you will have the ability to design your own DSL (Domain Specific Language) that is so useful in your future endeavors.
Writing your own text editor, or better yet, IDE, would be good, too.
I assumed the tightrope-walker might indicate that I was not being 100% serious. Oh well, sorry if it didn't come across that way. 🙂
I love this. I've actually started my own adventure game after watching a couple of your videos on the subject!
One thing that I get slightly hung up on is that as I code things I notice the different ways of doing things and get stuck on wondering what is the 'right' way to do things. This can really slow me down and be a bit paralysing in some cases.
I am wondering what the best course of action is. Is it best to think about it, do some research and go slowly but surely forward or is it best to charge ahead one of the paths and see what happens?
Thanks
That's great. I'd advise you to try to figure out as much as you can yourself then look for further information when you hit a major barrier. Don't just cut-and-paste (or AI-generate) code, though. That won't help you internalise your learning.
Good luck!
Huw
Don't get hung up on the "right" way to do things - especially when you're learning. Find SOME way of doing it and move forward. Get messy - make mistakes. When you make a mistake you find that extending the system gets harder. You start thinking "This is crazy - If I change that part so it works this way, then this part becomes trivial". That's where the real learning is.
@@simberon7751 Absolutely. If you are not making mistakes, you probably aren't learning much. 😁
@@simberon7751 Thanks, I appreciate that feedback. I actually noticed one of those moments today!
As I'm building out any classes that feel the easiest to do, and doing basic tests to go along with it. I noticed testing my inventory system was becoming a nightmare because I had to attach locations to each item I created and then add it them to my room as well. so I just ripped out location data from the items so it's only stored either in the room or the inventory. It's suddenly much easier to test and one less thing to think about.
I'm also fighting with trying to enforce correct types with python to keep track of all the different object types I'm passing around. I think I'm starting to understand why languages like c# and Java are preferred for these big OOP projects.
@@simberon7751 my previous comment didn't show so sorry if it pops up as a double post.
Thanks for the encouragement, I actually had one of those moments today! I removed one thing and testing got much easier.
I'm also doing my project in Python and I'm realising trying to enforce all these object types is getting quite awkward, I think I'm beginning to understand why languages like Java and C# are popular for these big OOP projects!
What is your opinion of use or generative AI like Claude AI and Haiku 3.5 to create codes on user prompts.
It's not something I have done. My feeling is that this may be handy to generate "quick fixes" (e.g. if you can't remember a sorting algorithm, maybe it can do it for you) but I don't think I would trust it with anything complex that requires careful structure, imagination and experience. I'm sure it would be great for leetcode problems. Not so great for creating truly innovative and reliable applications. 🙂
@LearnWithHuw I'm actually learning faster and better programming by interacting with it like with a coach. It aids me to find bugs faster and try figuring out say I did it this way how's would this AI do it? The quality of the response depends entirely too anyway of what you actually what you know by experience when using this generative AI.
Thank you...
Cool advice!
Thanks
Great video! Im new to python programming. Building a blog in Django - is that considered writing a program? Thanks again
It's all good experience. However, to learn the principles and practice of programming, I'd recommend that you also try writing programs "from the ground up". That is, without a framework such as Django. Get Python installed on your home computer and learn to write a program in pure Python.
Good luck!
Huw