Negative programmer reaction of the Code.org Video

Started by
75 comments, last by cr88192 11 years, 1 month ago

I strongly believe you should teach it in a class using GCC on a Linux-based computer with X Window System disabled (no GUI whatsoever for anything, for all of you non-NIX-ers).

X disabled? Think of the children!

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

Advertisement

But, if you are to teach programming, I strongly believe you should teach it in a class using GCC on a Linux-based computer with X Window System disabled (no GUI whatsoever for anything, for all of you non-NIX-ers).

Are you for real? How relevant a skill is it in this day and age, to be able to operate bash and emacs on a 80-character display?

There is no harm in teaching friendly languages (say, python, or ruby), in a friendly environment (such as a slick IDE and/or text editor). There's no reason why you should make a student wade through an arcane an unfamiliar shell, just to edit or run their program.

Don't get me wrong, I am of the opinion that any engineer worth his salt can excel at working in such a limited environment - but it has nothing to do with computer science, or learning to program, and you are liable to scare off an entire generation of otherwise suitable candidates.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Are you for real? How relevant a skill is it in this day and age, to be able to operate bash and emacs on a 80-character display?

There is no harm in teaching friendly languages (say, python, or ruby), in a friendly environment (such as a slick IDE and/or text editor). There's no reason why you should make a student wade through an arcane an unfamiliar shell, just to edit or run their program.

Don't get me wrong, I am of the opinion that any engineer worth his salt can excel at working in such a limited environment - but it has nothing to do with computer science, or learning to program, and you are liable to scare off an entire generation of otherwise suitable candidates.

It's not about scare tactics, its about the modern kid being extremely impatient with technology and used to the instant gratification that comes with computing products like touch screens, ultra-user-friendly GUI's, mobile phones, digital media, and the overall misconception about what programming is, and the nature of computing machinery. Yes, we have popular culture to thank for that, but still, I am of the opinion that giving the student the limited tools is what increases attention span and patience, increases understanding, and breeds good engineers for when they get in the real world where everything isn't in ANSI C anymore and you end up using a plethora of tools and languages. That way, they aren't dependent on anything whatsoever and while you may use more convenient tools, you can master them and have a much more complete knowledge of things than someone who starts out on ruby and stays there, maybe dabbling a bit in C and/or Java.

C dominates the world of linear procedural computing, which won't advance. The future lies in MASSIVE parallelism.

People ... people ....

Let me add my 2 cent.

First, watch this Nova Science epsido

">

a) That will answer someone question on why learning a musical tool is important. Yes, it is.

b) That is also the reason why learning programming is logic. It's not about the syntax or Asm push and pop. It's about understanding a problem, use logical problem solving, solve it in the right manner to get the right result. And this will help you think, solve problem, and shape you brain to best use it.

Thanks.

EDIT:

I just notice that the video clip was a 30 second intro for the episode. i don't have the time now, but just search around for the complete episode. Sorry. I know it existed on youtube...

Here, straight from the source

http://www.pbs.org/wgbh/nova/body/how-smart-can-we-get.html

It's not about scare tactics, its about the modern kid being extremely impatient with technology and used to the instant gratification that comes with computing products like touch screens, ultra-user-friendly GUI's, mobile phones, digital media, and the overall misconception about what programming is, and the nature of computing machinery. Yes, we have popular culture to thank for that, but still, I am of the opinion that giving the student the limited tools is what increases attention span and patience, increases understanding, and breeds good engineers for when they get in the real world where everything isn't in ANSI C anymore and you end up using a plethora of tools and languages. That way, they aren't dependent on anything whatsoever and while you may use more convenient tools, you can master them and have a much more complete knowledge of things than someone who starts out on ruby and stays there, maybe dabbling a bit in C and/or Java.

And all I read here is 'blah blah blah instant this blah blah satisfaction that'.

I, like many others on this board, started out with BASIC (In 1991, I was 11) - the instant feedback and gratification of seeing something I wrote was what kept me going, interested and pushing forward with my knowledge. I tried a couple of times to learn C but it was just boring cruft, I had no interest in it and I was getting good results with BASIC and 68K Assembly so didn't bother to learn it.

If, when I was 11, someone had sat me down in front of the system you were describing... well, frankly chances are this board would be missing one of the best program solvers/coders on here (yes, egotistical but frankly its true smile.png) because when you are young you want that feedback.

Now, not everyone is going to go on in their own time and learn the guts of a computer, how things work from the ground up and pick up other languages - maybe they play around in their Python box for a bit while it interests them and you know what that is just fine.

Not everyone needs to know the ins and outs of a system, just being able to solve a problem using something like Python, or indeed access to the skill set that using it would develop, would be useful. But for some people exposure to this might well flip on a switch which causes them to go out and learn more, push the boundaries and generally experience a subject they would have otherwise missed out on because no one said 'hey, want to try this?'.

(Which is something I only had because we had a BBC Micro at home, my dad could code a little BASIC as he was interested in technology and I happened to have a friend who could code in BASIC.)

The idea isn't to turn out fully qualified C engineers who could write you the next doom; the idea is to expand the skill set of people in general and given those interested exposure to something else.

To draw upon the exposure to music example people have thrown around; going your route would be like asking people to start off with a stave of music and a harp to see if they liked music. Where as the better choice would be to start them with something simple like a Xylophone or keyboard and let them play around a bit, teach them some music theory and see how they like the subject... kinda like how I was introduced to it.

(Amusingly I have a GCSE in Music but no qualification in anything directly computer programming related until I got my degree in Software Engineering. There was an A-Level in computing but as I was already taking Electronics, Maths and Biology they wouldn't let me do that too, which is a shame on reflection as I recall writing someone's assignment for it in about 5 minutes during a maths lesson once... oh well)

The idea isn't to turn out fully qualified C engineers

I do see the great flaws in my logic, and I greatly admire and respect your skills and opinions, but don't you think that the purpose is defeated if you aren't training potential engineers to be the best there is, the "cream of the crop"?

I sometimes might say stupid, belligerent, and heedless things here, but if there are three points of what I'm trying to express in this thread:

1. To train tomorrow's absolute best engineers, you have to start from the core, just like we do in mathematics, among other subjects.

2. I admit that there has to be some kind of quick return on the initial time investment, but starting out with Scratch, Alice, Ruby, or other things is a mistake. Those things are definitely useful and wonderful later, but shouldn't be the base.

3. These classes should NEVER be mandatory, lest the purpose be utterly defeated.

C dominates the world of linear procedural computing, which won't advance. The future lies in MASSIVE parallelism.

The idea isn't to turn out fully qualified C engineers

I do see the great flaws in my logic, and I greatly admire and respect your skills and opinions, but don't you think that the purpose is defeated if you aren't training potential engineers to be the best there is, the "cream of the crop"?

I sometimes might say stupid, belligerent, and heedless things here, but if there are three points of what I'm trying to express in this thread:

1. To train tomorrow's absolute best engineers, you have to start from the core, just like we do in mathematics, among other subjects.

2. I admit that there has to be some kind of quick return on the initial time investment, but starting out with Scratch, Alice, Ruby, or other things is a mistake. Those things are definitely useful and wonderful later, but shouldn't be the base.

3. These classes should NEVER be mandatory, lest the purpose be utterly defeated.

The reason I think these classes should be mandatory and simple is to get people who otherwise would not have tried it engaged. How many people out there have the potential to be excellent engineers but never get into it because they are not exposed to it? That's why I think it doesn't matter how much the students actually learn about programming in these basic classes. It's just a teaser to get those who normally would not have signed up for a programming course a chance to try it out to see if it's actually a good fit for them. In addition, I do not think it's possible to turn out great programmers from an academic institution. The best that I have worked with have a passion for it and would have been great regardless of their education. However they all have to have been exposed to it at some point for it to click for them and for that interest to turn into a passion. That is the opportunity we should be giving to everyone.

don't you think that the purpose is defeated if you aren't training potential engineers to be the best there is, the "cream of the crop"?

You are assuming that the purpose here is to train engineers, but I'd say that is missing the point.

The purpose is to give kids the tools they need to make an educated decision about whether they want to pursue training as an engineer. You can turn pretty much anyone into a competent engineer, given enough determination and time - but you can't do that unless they want to be an engineer.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

And all I read here is 'blah blah blah instant this blah blah satisfaction that'.

I, like many others on this board, started out with BASIC (In 1991, I was 11) - the instant feedback and gratification of seeing something I wrote was what kept me going, interested and pushing forward with my knowledge. I tried a couple of times to learn C but it was just boring cruft, I had no interest in it and I was getting good results with BASIC and 68K Assembly so didn't bother to learn it.

If, when I was 11, someone had sat me down in front of the system you were describing... well, frankly chances are this board would be missing one of the best program solvers/coders on here (yes, egotistical but frankly its true smile.png) because when you are young you want that feedback.

Now, not everyone is going to go on in their own time and learn the guts of a computer, how things work from the ground up and pick up other languages - maybe they play around in their Python box for a bit while it interests them and you know what that is just fine.

Not everyone needs to know the ins and outs of a system, just being able to solve a problem using something like Python, or indeed access to the skill set that using it would develop, would be useful. But for some people exposure to this might well flip on a switch which causes them to go out and learn more, push the boundaries and generally experience a subject they would have otherwise missed out on because no one said 'hey, want to try this?'.

(Which is something I only had because we had a BBC Micro at home, my dad could code a little BASIC as he was interested in technology and I happened to have a friend who could code in BASIC.)

The idea isn't to turn out fully qualified C engineers who could write you the next doom; the idea is to expand the skill set of people in general and given those interested exposure to something else.

To draw upon the exposure to music example people have thrown around; going your route would be like asking people to start off with a stave of music and a harp to see if they liked music. Where as the better choice would be to start them with something simple like a Xylophone or keyboard and let them play around a bit, teach them some music theory and see how they like the subject... kinda like how I was introduced to it.

(Amusingly I have a GCSE in Music but no qualification in anything directly computer programming related until I got my degree in Software Engineering. There was an A-Level in computing but as I was already taking Electronics, Maths and Biology they wouldn't let me do that too, which is a shame on reflection as I recall writing someone's assignment for it in about 5 minutes during a maths lesson once... oh well)

yeah, I started off also with BASIC, generally with QBASIC.
the quick feedback was generally an advantage, as one could edit some stuff, and hit a key, and run it.

VS + C# sort of offers a similar experience (though IntelliSense is sort of a love/hate thing, like autocomplete is nice but I also like the ability to just type some crap without autocomplete expanding things to random crap and/or grabbing the cursor, so more generally prefer editors that use something like TAB-complete instead).

things like ability to edit code during debugging, ... can also be nice.


for C and C++, the need to go through an often long/slow rebuild process is kind of a drawback, but its advantages lie in other areas. for people new to programming, this itself is likely to be a bit of a disadvantage (though partly offset by the advantage that if using an IDE, at least probably their apps will be small enough that they wont be subjected to a several-minute rebuild cycle...).

how I originally moved over to C was mostly by messing with the Wolf3D and Doom source, and by the time I started getting a little better there was the Quake and later Quake 2 source to mess with (then I started messing a lot more with 3D via OpenGL, ...), ... (but, GPL meant I would later have to drop most of this code).

still mostly using C though, mostly at this point due to most of my tools being mostly C specific (the code is somewhat "tooled up", for better or for worse, sort of like Obj-C but without so much nasty-looking syntax). the second-place language is my script-language.

technically my engine also includes its own built-in code editor and can do "F5 to execute", but this is rarely used as the UI kind of sucks (it is sort-of part-way between something like QBasic and something like ViM), and it executes inside the console as well (FWIW, the console buffer is loosely comparable to text-mode graphics hardware, and it is possible for "programs" running in the console to hook into various events, ...). (I actually debated between this and using ANSI / VT100 control codes, which my console code also uses to some extent). its UI badness though still leaves it generally preferable to use a "real" text-editor, and then just do a ';load("whatever");' command from the console to reload it, or just use ";whatever" commands (";" prefix is magic), which immediately evaluate code fragments (not good for non-trivial code though, given nearly everything has to be typed into a single console command, *1).

ironically though, most of the script-code still ends up merged into the various engine DLLs at build-time though (generally post-link, a tool goes and shoves all the script-code/... into the DLL). (note: it is not compiled to native code at this stage, this part typically happens incrementally at run-time).

*1: note: turns out to be fairly useless for (standard) C, given how the language works. C turns out to make a pretty poor script language and is not well suited to interactive entry, and otherwise extensions and variations from the standard would be needed to increase suitability (though most code could probably still work, people can get into fights over the edge-cases, and strictly speaking, things like Ch and CINT aren't C).


but, yeah, in any case, immediate feedback is probably more useful in keeping peoples' interest...
the more painful or awkward it is made, the more likely they are to be scared off or loose interest and do something else...

The reason I think these classes should be mandatory and simple is to get people who otherwise would not have tried it engaged. How many people out there have the potential to be excellent engineers but never get into it because they are not exposed to it? That's why I think it doesn't matter how much the students actually learn about programming in these basic classes. It's just a teaser to get those who normally would not have signed up for a programming course a chance to try it out to see if it's actually a good fit for them. In addition, I do not think it's possible to turn out great programmers from an academic institution. The best that I have worked with have a passion for it and would have been great regardless of their education. However they all have to have been exposed to it at some point for it to click for them and for that interest to turn into a passion. That is the opportunity we should be giving to everyone.

But then again, lets say there is a mandatory "Intro to JavaScript Programming" course at an average American high school. You take it after Algebra, and you have to get at least a C average in the course to graduate. Lets say the class consists of 35 kids. That's a lot of kids, but computers are expensive, and everyone at school has to take this class one year or another before graduation. How many do you think are going to have the "click" with programming that would make them want to pursue it? Not all of them, and by that I mean only a few. Nothing at all is wrong with not liking programming, but do you think if Jonathan P. Doe is in a class with a buddy or two who aren't good students and are only taking the class to graduate that they will behave? They will probably not. And when you have a classroom like that nothing gets done, distractions are made, and the class lags behind severely. The teacher might have to teach Randall P. Roe and 7 other kids a different way than Amy P. Soe and 11 other kids. What happens if Jonathan P. Doe is non-stop screaming with so many people that the teacher loses control? What do you do if Sarah P. Boe finishes all of her assignments early and spends the time undermining the teachers efforts? What do you do if all but a few kids are ruining the class for everybody? I'm sorry, but I don't see how that could work. I know a high school computer teacher, and my examples come straight from things they have said go on in their classes. Because they are mandatory and not leveled like the rest of classes, they become classes where no concentration or study is done whatsoever. That's why, IMO, if programming has to be taught, it should be an adjunct to math courses like Advanced Algebra, Calculus, but mostly Discrete/Analytical Mathematics. Even then, I don't believe enough people would even truly like it at all for such a program to be effective.

C dominates the world of linear procedural computing, which won't advance. The future lies in MASSIVE parallelism.

This topic is closed to new replies.

Advertisement