3 ms·
I am helping my son to learn c++ for his school clases. This shit that makes sense for us has no fucking sense for a beginner. So for the simple for loop for(i
by simion314 5y ago
I am helping my son to learn c++ for his school clases.
This shit that makes sense for us has no fucking sense for a beginner.
So for the simple for loop for(int i = 0; i< something; i++){} there is a large number of syntax errors a beginner can do, he can forget to open or close the () , he can forget about the : or placed them in the wrong place, he can forget about the {}.
For sure I do not start teaching my son about the c++ compiler, linker though I show him how the program runs in the IDE debugger and how changes update.
Low level stuff is needed much later for maybe parts of the students, at the beginning is too much junk that needs to be learned like a parrot.
- WithinReason 5y agoI think you hit the nail on the head. For a beginner learning about a language is so much more important than the compiler, and there's only so many things you can pay attention to at a time. When you're starting it's very important to only learn the minimal subset needed. Later you can expand if you need it, but I have been programming for close to 2 decades and I can count on one hand how many times I had to call a compiler directly. I didn't code much Java though, so maybe there it's different?
- astrobe_ 5y agoI have been programming for 3 decades, the 2 last as a dayjob. It seems to me that there is a deep cultural chasm around the new century. Before 1990 you had next to no Internet and computers were shipped with book-sized printed manuals that were trying to explain how the thing worked, not just how to operate it. After 2000 they begun to come with a single sheet showing how to plug them and www address for perverts who want to download manuals. However it's not entirely a matter of when you started to touch the keyboard. Around me I see "people who understand" and "people who use" of various ages. Guess who helps who more often.
- WithinReason 5y agoIn my experience the people who are helping are the ones who use tools that lets them work more efficiently. They have more time to learn new things, while the ones who use less efficient tools use much of their mental effort on the tools themselves.
- simion314 5y agoThe pint we are discussing is teaching in the first years, I agree that you don't want to hire a c++ programmer that does know what "linking" means or a Java developer that does not know what the classpath is, or a JS developer that does not know that he can leak memory too and you should manually cleanup sometimes in JS too.
- astrobe_ 5y ago> For sure I do not start teaching my son about the c++ compiler, linker You could, or at least the tip of that iceberg. Compiling a simple program often is a simple one-line command. Perhaps you can show him how to automate this with a shell script or (gasp) a makefile. The reason why it is not "junk" is that it will teach him a bunch of important things: that you can "talk" to a computer using different languages, that those languages have different capabilities, different properties and different grammars (syntax), and that languages are all about grammar and semantics. > Low level stuff [...] at the beginning is too much junk that needs to be learned like a parrot. I see a problem with teaching there, rather than a problem with what to teach. Anytime you make people learn by heart something that needs to be understood first, there's a failure to teach. It seems these days that we are trying to rush people who are not even comfortable with files and folders to "code". That's stupid in itself. How about teaching them how to use a computer before trying to program it? Is it not a saner approach? Even if they don't get programming at least they'll know a bit better how those things actually work. (And why the hell your son has to learn C++ first thing in the morning when there are more beginner-friendly languages. That's another major failure, if that's true.) It follows the general philosophy that a computer is just a tool that should be at people's command. But that approach only makes good customers, people that are helpless when problems come. Farmers had that sort of problem and had to fight to have the right to repair their "tool". The correct and actually beneficial philosophy is user-tool co-evolution, that is mutual adaptation. And for this to happen, the user has to really understand their tool.
- Dirak 5y ago> The reason why it is not "junk" is that it will teach him a bunch of important things: that you can "talk" to a computer using different languages, that those languages have different capabilities, different properties and different grammars (syntax), and that languages are all about grammar and semantics. This would be a good point if the year where 2003. Compiling code and setting up a proper coding environment is a solved problem that isn't worth the headspace of a young and aspiring programmer. In the modern day, you can open up the console on your browser and start writing and running code just like that. What's far more important for a beginner is to learn algorithms and data structures, which are timeless concepts that are highly valued and can be applied to any language or environment (and to give OP credit, C++ is a fine language for learning these concepts). Recursion vs iteration, control flow, data structures, time-complexity -- gaining a mastery of these topics will enable the student to write programs that make it worth while to then learn the auxiliary technologies that can make their programs usable and sharable -- unix commands, compilers, linkers, etc -- learning these tools as a means to an end. > The correct and actually beneficial philosophy is user-tool co-evolution, that is mutual adaptation. And for this to happen, the user has to really understand their tool. I would argue that a lot of existing technologies such as unix are less so philosophy driven and more so backwards-compatibility driven where things exist purely for historic reasons. The idiosyncrasies of say unix can be a headache for a beginner, and it'd be a better use of their time to only interact with those technologies when absolutely necessary.