[quote="Chozon1"Wholey crudstanks...I must eat this. O_O
McNuggets are underrated?[/quote]No, they are overrated. I don't hate them, but I don't find them great either. It's cheap chicken when you can pick up 20 for $5, though. Pink slime, baby.
Deepfreeze32 wrote:So I'm going to make the (Probably reasonable) assumption that you experienced a fairly normal CS education in college. Start out with C/C++/Java programming, get good at that for a year or so, then learn things like Assembly, computer architecture, OOP, Algorithms, and so forth.
A friend has proposed an alternative solution which I'm thinking may be a good idea. Instead of learning high-level programming first, start at the Assembly level. He suggests that we use a good hypothetical computer (Like
MIX) to teach the basics of zero-abstraction computing. Learn really basic Assembly operations (like arithmetic, jumping, and a general program flow with a stack-based idea) for the first semester. Then learn things like C and C++ which provide abstraction but still allow Assembly operations. His thought is that if you learn the low-level stuff, not only will you appreciate high-level more, but you'll associate the abstracted concepts with what the CPU is actually doing, thus allowing the programmer a better handle on programming as a whole.
What think you?
Well, I actually started with BASIC around age 9 or so, so the weeding programming classes were pretty breezy for me.
I don't think I prefer that as a program. Yes, learning Assembly helps with granular knowledge, but that's not the fundamental things you need to know about programming. It's logic, the ability to problem solve and architect solutions, that is fundamental to software engineering. I think starting with Java is pretty good; it's beginner friendly, gets your hands in some OOP, and really gets you started programming solutions pretty quickly. If I were to add something earlier in the learning path, maybe a very approachable system to get people thinking about using logic systematically to create structures and solve problems. Maybe some visual programming system where the users stacks blocks and pipes and they get to watch their logic system in play.
Starting with assembly will also give people trying out CS the wrong idea on what programming is. A lot of people try the intro to programming class as their first foray into computer science. It's important to show the fundamental ideas on what programming is, and not the underpinnings of high level languages or what programming used to be.
Now, I very much enjoyed doing assembly and learning about computer architecture, but much of that was out of appreciation for my understanding already of programming.
In another example, if I were to teach someone to drive a car, I'd start by getting them driving in a safe environment (java). Maybe even start out with smaller application, like a go-cart (the visual programming system). Going into the mechanics of a car, or what driving used to be like pre-ABS, pre-power steering, when we had to hand crank it, is just giving the wrong initial idea.
Once they become more familiar, I'd introduce them to the underworkings of the car, and how the throttle works by regulating the fuel/air composition, and how shifting gears is important because the RPM ranges of the engine and how the transmission works around this.
Now, I'll admit I'm a little biased on this. While, just as I said, I enjoyed working with assembly, I'm a high-level programmer and I view high-level programming as the future. You might be able to gain small improvements on efficiencies by programming low-level, but the compilers themselves do a great job, and high level languages allow you to build complex structures needed to meet today's software requirements. It's just a lot of extra error-prone work and just needlessly rigorous.
I'm not arguing that it's not important for a programmer to understand low and assembly level programming, along with the computer structure, but I don't think it's so important that we need to start out with it.