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 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
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
And all I read here is 'blah blah blah instant this blah blah satisfaction that'.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.
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]
yeah, I started off also with BASIC, generally with QBASIC.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) 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)
Current Status / Downloads: http://cr88192.mooo.com:8080/wiki/index.php/BGB_Current_Status
YouTube Channel: http://www.youtube.com/user/BGBTech
Main Page: http://cr88192.mooo.com:8080/wiki/index.php/Main_Page
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.