Excellent advice! After programming for 35 years, on IBM iSeries, Delphi, C, smallTalk assembly language, etc., I was the sole developer for a new website which provided foreign language lessons for medical professionals. I had not used HTML since 2004, and had done only simple web projects. I designed a SQL database with many relational files, used JSON to communicate with the database, and used drag-and-drop, audio, CSS, and the various editors. I also created all of the customized tools I needed to help me manage the code, database, and website. It took many hours over SEVERAL months, but was a very good, and fun learning experience. Now looking for a new project.
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 the 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.
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.
I couldn't agree more! Do projects, finish projects, overcome obstacles! Even if you do the end result the wrong way you will learn SO much during that!
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 YouTube 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.
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
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.
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
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.
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.
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
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!
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.
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.
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.
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. At university, I discovered competitive programming, and I'm working towards becoming a grandmaster in codeforces. Before you ask, I did have knowledge of data structures. It's kind of not possible to not understand them at all and make fairly complex projects. But I did not actually learn them past the basics, I just read up on what I needed to know to get my game working, I understood the basic logic behind them, but did not try to learn them more deeply and when it comes to algorithms I could count the ones I knew on my left hand's fingers and the rest I'd just forget right after copy-pasting and modifying the part of code I needed for my project.
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.
How i actually became better was that i stopped for awhile and just thought about concept and broke it down with pseudo code. Then i looked at other people's code and try to break the code down in my mind to be able to visualize the steps that are happening. Then maybe write the same thing (get the same results) but in a different way; it doesn't matter if it's more efficient or not. Other than that just looking up parameters and arguments for functions can help you understand the layout and syntax of the language.
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.
@mrroobarb