Why Johnny Can't Code 686
GoCanes writes "Salon has an article named 'Why Johnny Can't Code,' an interesting examination of the dearth of line programming languages available today. At first I wanted to read this and say aha, here's a simple line oriented language that's available through open source, but after reading the article I couldn't find any. And being an old fart, I remember the days spent with edlin and basic."
passworded article (Score:4, Insightful)
Why Line-Oriented? (Score:3, Insightful)
Why line-oriented?
Easy solution... (Score:4, Insightful)
Ruby could be this language (Score:2, Insightful)
Taking Ruby to the kids [rubyinside.com]
Re:Kids today...... :-) (Score:5, Insightful)
One of my most memorable classes was the C++ class when the teacher started off by teaching how compilers actually compile your code. Directly from this you could easy see what code to write and what not to write. Those classes have been replaced by Java, where you don't even worry about resource leaks. Hey, garbage collector takes care of it!
To make good programmers, one has to understand the basis of it. Compilers, C and Assembler. If all they learn today, well mostly OOP stuff, they won't learn the basis well. And they will end up writing bloated code left and right.
bah simple (Score:4, Insightful)
Kids are fundamentally spoiled nowadays. They got a high speed computer, high speed net, digital cable, cell phones, spending money, etc.
When I was a kid [and damn I was a kid of the 80s/90s] I sure as hell didn't have half of that. My computer was a XT up until I was 11 or so then it was a 386/25 we scraped together from spare parts. We didn't have net access only local BBS stuff so for the most part we had to INVENT our own fun. That is, code stuff up, mess around with the box, etc.
If you want your kids to have similar adventures to what you had as a kid just don't spoil them rotten. Why on earth would your kid at age 10 want to sit through and learn themselves BASIC or C or Pascal or
You can save money and your children themselves if you just learn to say "No."
That and your kids will appreciate earning money later on in life so they CAN buy themselves toys and shit. Teach them the value of work [or at least looking like working...]
Tom
The REAL reason Sally can't code (Score:3, Insightful)
I didn't get hooked because I wanted to hack computers. I got hooked on old games (like Colossal Caves). When I finished all the games, I decided to write one, and learned BASIC. Today, you never finish the games. They just get better and better. There's no way I would have spent all that time hacking if the games available today were around back then.
Re:Absolute nonsense (Score:5, Insightful)
Nowdays cool is Half-Life 2 type graphics. And I suppose the nearest to drawing a few boxes on the screen is coding DirectX/OpenGL shaders to do cool things on a few objects. The learning curve is still as steep, but think of all the stuff you need to know before getting something interesting done - it's a much longer way from bottom to top and you consequently need more determination to get there.
I think you'll now find many of the kids who would have previously cut code now working on mods for games. Maybe that will sprout creativity in a way that the article suggests, but it is difficult to see what.
Re:Absolute nonsense (Score:3, Insightful)
Nowadays most languages requires downloads (java, php), installation procedures (java, php, visual basic), having to learn development tools as well as the language itself (visual basic), a compiler (C, visual basic, java) and whatnots...
Those that don't require complex set-ups require the knowledge of another language to work properly (vbscript, javascript require HTML/CSS knowledge).
Other even need a server set-up properly before you can use them (PHP, ASP).
Even something like Python needs additional package set-up. Python documentation is also not the easiest to find (beginner books and easy tutorials are rare).
Re:Kids today...... :-) (Score:3, Insightful)
Not just kids - article writers too.
"Dearth of line programming languages" my arse. Last I looked, almost every programming language is composed of lines of source code that you can write in a plain ascii editor. What the author is complaining about (without understanding it) is CODING IDEs replacing typing in your complete file as plain source code.
c, c++, java, perl, python, php, pascal, javascript, whatever - you can write all your source the old way - line-by-line, and most of us do. Heck, even Delphi, one of the better IDEs, doesn't require the IDE environment if you really want to go the type-in-all-the-source route. Last I looked, both c/c++ and java were available for free for all the major platforms.
In other words, the original article itself was a "nothing to see here" filler by someone who needed to write *something* before deadline. Sheesh!
Re:Kids today...... :-) (Score:2, Insightful)
Scripts? (Score:4, Insightful)
DOS batch files are pretty limited, but there have always been DOS programs to help extend them, and now that Windows is all NT-based,
Once you're pretty advanced with such shell scripting, it's not a hard transition to interpreted programming languages like PERL, and then to compiled languages.
I have a feeling the lack of kids programming has more to do with the fact that it's "unwashed masses" time, with the advanced still programming, but being hidden by the larger numbers of point-and-click users.
Re:As the world changes... (Score:4, Insightful)
If you're suggesting that programming is no longer as difficult as it was, then this would rather imply, a) programming viable applications is easier now than it was, or b) people are far more intelligent than they were. Neither explanation seems very likely. As far as I can see, programming is still a craft that very few people are capable of doing with any competance.
However, if you are suggesting that it has lost some of its 'elite' image, then perhaps you are right.
Re:Why Line-Oriented? (Score:5, Insightful)
Because Djkstra was right. With whatever apologies might be due to the author, his early exposure to BASIC has damaged his mind so beyond repair that he cannot concieve of a good learning language as being anything other than line oriented.
Python and Squeek, each in their own way, are probably the best learning languages ever devised. They are both "real" languages that can be used for "real" work after you learn them, but also serve as good stepping stones to other languages, without instilling you with a line oriented mind.
Programming students don't need to learn line numbers, they need to learn number; mathematics; and logical structure. Line numbers do nothing other than give the illusion that a program has structure, whether it actually has any or not.
KFG
Re:Kids today...... :-) (Score:5, Insightful)
For example, lets take the author's wishlist - creating Pong. I'd wager that the game can be written in a lot more expressive manner in any higher-level language, compared to basic. Poking different screen locations arent a lot of fun; gorilla.bas gets old very soon. Kids like instant gratification(adults too!)- higher level languages are ideal for this.
Re:Why Line-Oriented? (Score:2, Insightful)
But I think a huge problem with students not knowing how to program is the lack of training in Logic. I remember learning geometry in HS, long before I started hobby programming. You had to know how to prove that one angle was exactly equal to another and show every step. Being able to do things like that is essential in learning to write a program, because you often need to test for a condition that you can't directly measure.
Debuggers (Score:2, Insightful)
Re:Absolute nonsense (Score:3, Insightful)
He did mention other languages like Python or C++, and discards them. I'm not sure why exactly, but apparently he doesn't think they are any good for beginners (I think he is mostly just nostalgic for his programming days in which he used BASIC).
I would actually say there are plenty of kids who learn programming these days. Yes, they are doing it using more modern languages that have not been rendered obsolete, but that doesn't mean they are not learning valuable skills.
And I call bullshit on his assertion that learning BASIC is the CS equivalent to a med student learning chemistry. Those basic fundemental skills are learned when the student takes a computer engineering course (which I believe most universities require) and learns how logic gates work and writes programs in assembly. Those are the fundemental building blocks of our modern computers. Learning BASIC is closer to a med student learning outdated theories on medicine. Interesting from the historical perspective, but not essential for their education.
Lets please institute a rule and stop posting articles from Salon. Whenever someone does, the article is nothing but elitist bullshit with a lot of ads.
Re:Kids today...... :-) (Score:5, Insightful)
CS a branch of mathematics? (Score:5, Insightful)
It may gall college profs who are still trying to foist formal methods on people but setting a high mathematical barrier to entry on CS courses and having a high maths content is a bad thing.
As an example I have a first in Microelectronics from a British University (a course which had a large syllabus covering 'C' and machine language) but only just scraped the 'C' grade needed in mathematics as an entrance to this course despite having 'A's in Electronics and Computing. I doubt I have used any maths much beyond British 'O' level standard since and certainly the maths knowledge required as entry to a degree level CS course is too wide and deep. It is all geared up to people going onto research rather than the real world. You don't need to be an expert in set theory to write the level of SQL required by most applications.
Why can't Johnny design circuits? (Score:5, Insightful)
Re:Kids today...... :-) (Score:5, Insightful)
Does this mean you need to know about peeks and pokes? In today's world, I no longer think so (and there's that huge collective sigh of relief from students everywhere). But you should definitely understand how your language handles memory, even if you're coding in a language with GC capabilities. It keeps you from churning memory and slowing down your app to a crawl.
Re:Absolute nonsense (Score:3, Insightful)
Re:CS a branch of mathematics? (Score:3, Insightful)
Re:Kids today...... :-) (Score:5, Insightful)
Before they did anything else they were writing programs. Simple ones that started the game. Next they were playing with loops:
And er,
Re:Kids today...... :-) (Score:3, Insightful)
Re:Kids today...... :-) (Score:5, Insightful)
Re:Why Line-Oriented? (Score:3, Insightful)
With GUI based languages it's very easy to get hung up on the look of the interface, with a line oriented language it's not there so there's less distraction from learning the fundementals of the language and, more importantly, of programming. What the article seems to be mourning is the loss of languages without all the added trimmings that distract from the underlying principles.
Consider 'Hello World'. In BASIC that would be: In C it would be something like: in C++ you're looking at And in Java you use something like or even (this is from a Java tutorial book set for a Java course one of my collegues was doing a couple of years ago) be told to create two files, the first being and the second being then use command line switches to compile both files to a single application. Which of these do you think will be least intimidating to someone just starting out and will give the clearest example to the learner on how to put a line of text on the screen. Also, note that all of these examples are line based, imagine if they also had to learn how to draw a window, and you also need to take into account that the BASIC program can be run directly from the commnd line, in most implementations, where as the rest all require a compilation step.The languages the author is harking back to aren't languages you're going to write the next competitor to Office with or the next killer console game, they are the languages that will teach you the fundementals that will make it easier for you to write those programs in other languages more suited to the purpose. Shell scripting could ber used to teach the the basics like putting a line of text on the screen) but tend to lack the variable handling and typing of a programming language. Sure, once someone knows the basics of programming and is ready to start writing real world applications, they will need the more advanced features and complexities of modern languages but by that stage they shouldn't be worrying about how to put some text on the screen or add two numbers together. Although, I recall writing some pretty complex apps in BASIC when I was at school (mostly for stats number crunching but I also wrote a simple word processor in Comodore basic on the CBM PET when I was 12).
Stephen
PS Perhaps someone could explain to the lameness filter the concept of source code examples? It doesn't seem to appreciate that they often contain lots of 'junk characters' and short lines.
mathematics killed hobbyist programming. (Score:3, Insightful)
Pleeeeeaaase... that's still the mantra I was hearing when I was 13 and happily beginning to code (in 1985). Why would 'we' be prevented from the right to code if 'we', litterature oriented people, despise mathematics ? There is still SO much to do with only 4 operations ! Granted, I won't dwelve into image processing, signal analysis or those fields where a strong math background is required. But I have a thing for databases, and in the 90's I was making nice applications to manage library catalogues. In Clipper, no less.
Well I'm not a programmer, save some hobbyist gadgets when I need them now, but I still can code some ASM, Basic, and C. When I feel the need, I'm not afraid to alter some parts of a GTK+/C program to better suit my aim. And I've never felt the urge to become a mathematician.
I think the mathematical mindset requirement is in fact more a deterrent for wannabe young programmers ; nobody knows how much good and creative ideas it cost the world to leave so much brilliant people at the door. Professionaly, I struggle everyday with mathematicaly clean softwares, written by certified engineers, softwares that are blatantly unfit to the mindset of my lawyer job. I have millions of ideas to improve the workflow I'm forced to follow, but when I bring them on the table, I'm sneered at because "I can't possibly understand computers". Stupid assh*les, I've had 3 time more computers in my life than them. But I need to eat, so I back off and go back to my paid work.
It's not really different than before when I was a teen. We had one of the first computer lab in school, but the management of it was trusted by our mathematics and physics teachers. Access to the lab was granted as a reward for good science pupils, no need to say I've never seen those computers closer than 10 meters away. That's because I strongly felt frustrated at the time that I pressured my parents into buying me a Tangerine Oric 1.
Re:Kids today...... :-) (Score:3, Insightful)
-- prof.dr.Edsger W.Dijkstra
IMHO Dijkstra is right and you are wrong. BASIC is a horrible language for learning to code and it is the wrong language to learn to code. It is not designed as a learning language. It takes the worst out of FORTRAN and mutilates it even further.
There are languages that are designed for that purpose and allow people to learn to code without mutilating their brain beyond recognition. I learned to code rather late (at the age of 14) and I had the opportunity to chose between Pascal, GraphFort, ASM (6502 and x86), Logo and BASIC. I learned them in exactly this order and used BASIC only in the rare occasions when the school forced us to work with it on 6502 based Apple ][ clones that could not do anything better. Even in that case I had a list of procedures which simulate recursion (and a few other suspects from "adult" languages) memorised so I could code in the horrid presudolanguage puke.
The problem with "Johnny can't code" is elsewhere. Johny does not have the stimulus to code. At all. In most households he is introduced at an early age to the computer as a toy and treats it as a toy while growing up. He does not look at it as a toolkit to assemble something usefull. He has no incentive to write anything in the first place and is getting less and less incentive as the personal computing continues to devolve to joe sub-average level. If you want Jonnie to code his parents have to provide him with a challenge which can be satisfied only by coding it. We grew up with it, trying to write a few "adult" programs which we (the adults) clearly know to be beyond Jonnie's patience and skill have not killed anyone. If Jonnie's parents have not bothered to provide him with such challenges and the tools to work on them (books on a real programming language), they should not bitch that he has no chance to become a programmer.
Re:Desktop Applets (Score:5, Insightful)
Back in the day we'd write BASIC, then graduate to C/C++ for the "proper" coding.
These days kids learn HTML, then Javascript to make the HTML do interesting things. Then they pick up PHP or Java (or VB if they're unlucky) and from there Perl, Ruby, Python, whatever.
The most popular "beginners" language is always the most powerful one with the lowest barrier to entry. Anything that you can pick up quickly and do cool stuff with provides the essential satisfaction feedback that keeps you progressing and getting better.
HTML provides the "oooh, pretties" before you even learn do any actual programming, and Javascript introduces you to loops/conditionals and even OOP if you want. PHP/VB then add in database integration and stricter efficiency requirements (not to mention often the added complication of stateless programming), and by the time you can program competently in them you're well on the way to becoming a full-fledged Developer.
I have a great hope for dashboard widgets - it's exactly the kind of low-barrier-to-entry, high-return-on-time-invested platform that makes it interesting to learners, and because it's Javascript it's even starting them off on the kind of language that's the most useful to learn[1].
[1] Not to knock VB, but if you learn BASIC or VB you can basically program in... BASIC or VB. Learn Javascript and you've got a leg-up on the syntax of C, C++, Java, Perl, PHP, Ruby, etc, etc, etc, etc, etc.
Re:CS a branch of mathematics? (Score:4, Insightful)
No, it's not true. 10 years ago most desktop software was written in C++ and Java - a hugely simplified form of it - was the next big thing. Fast forward 10 years and most desktop software is written in C++. Most new languages and tools are pretty similar to old ones. Radically different toolsets like pure functional languages have never taken off, and show no signs of doing so. The best programmers are still the ones with the most experience, not the ones who know the most pure maths.
The point of all the math is to make the subject sufficiently academic that it is acceptable to universities, who are scared by anything vocational.
The skills that everyday programmers need to do everyday jobs are more around understanding the tools they'll be working with - how a computer actually works, what version control is, how to architect software to be modular, what regular expressions are, how to work with debuggers etc. These are the skills that university graduates routinely lack, and routinely get nailed in job interviews by.
Bits of the math are useful - being able to work in base 2 and base 16 for instance, or having a basic understanding of time/space complexity. Unfortunately most courses focus on big O notation to a ridiculous extent, meaning that it's not uncommon to see "data structure abuse", where some extremely fancy and theoretically fast algorithm is used, but due to some awkward practical factor like poor locality or excessive memory usage ends up being slow.
Re:Kids today...... :-) (Score:5, Insightful)
I think the best candidate for a BASIC replacement was HyperCard, but alas, that too is a dead project. It was cool, and its scripting language - HyperTalk - was revolutionary in that it was geared to resemble "natural English". Sure, it was limited in many ways, but the original Myst was made with HyperCard, and those of us that fiddled with it were ready when the Web hit prime time, already armed with the concepts of event-oriented design. HyperTalk scripts were easy to read, so easy that commenting became scarcer.
I can't find a worthy successor to HyperCard, though. IMHO Apple should release it under some open source agreement, so that it can be ported
Re:Oh, please.... (Score:3, Insightful)
>essentially identical to the internal processes of a video game, a web server, or
>the embedded micro-processor that drives your microwave oven?
the same way you would've done it back in 1982: "when you write a program, you tell the computer what to do. these are simple programs; games are complex programs. but they are both programs."
believe it or not, professional games back then were amazing and awe-inspiring to people like me who were just learning how to make a computer do *anything*. while i was puzzling out BASIC's GOSUB and C64 assembly, i was also playing stuff like Zork, Zaxxon and Ultima III. yes, those games seem primitive today, but they were far beyond what your typical programmer could accomplish with BASIC. i knew they were programs, and that they were probably beyond my skill to create at the time (even now, too). it didn't take long to figure out that BASIC gave me control of the computer, and that making a game like Jumpman was just like writing any other program, but bigger, better planned, and probably in a langauge like Assembly. but that didn't stop me, or confuse me, it made me want to learn more.
i think the loss of easily-accessible and very simple programming tools is a tragedy. yes, you can install Python or whatever (just like i could've installed C on my C64). but that's still too big, IMO. computers should come with *simple* scripting languages built-in (no, bash, ksh, etc. are not simple). the goal should be to teach people that programming gives you control of the computer - even if it's an illusion because it's really an interpreted language running in a sandbox in a user process on a multi-process computer. that's the big leap - don't give them Python because it's "more powerful than BASIC" - power isn't the problem - an easy way to get comfortable with basic programming concepts (sequential execution, variables, input, output, etc) is more important than power.
Re:Why Line-Oriented? (Score:2, Insightful)
20 Because, after all, it's much easier to understand this way.
30 You don't have to look out for those small, easy to overlook dots.
40 Instead you know exactly where your sentence ends.
50 Because it always ends at the end of the line.
60 Of the current line, that is.
70 Only in advanced English you should go to the trouble of sentences continuing on the next line.
15 Of course with line numbers.
16 That also makes it easier to later insert something in the middle of the text.
16 That also makes it easier to later insert or change something in the middle of the text.
80 Because beginners will only be confused by those multi-line sentences.
75 Or sentences beginning and ending in the middle of a line.
The article is only partly right. (Score:2, Insightful)
Does anyone today know a magazine like ANTIC for the Atari? Twenty years ago there were dozends. Today? None.
So install whatever programming language you want on you childrens computer. It won't change anything.
Re:Absolute nonsense (Score:3, Insightful)
the barrier to do something cool is in the stratosphere
I was thinking that, myself, but I'm actually convinced otherwise. The barrier is quite high, if by "something cool" you mean games and graphics.
However, there's still an obscenely huge amount of useful, interesting things which can be accomplished by small amounts of little scripts... All these internet-based APIs out there (Google, Flickr, etc) provide a low barrier of entry for some degree of "cool".
I think the real problem is a lack of motivation. In the good old days, you hacked on computers because, quite frankly, there probably wasn't that much else to do. Now, computers do (WAG) 99% of what the average kid expects/wants/needs.
c.
Re:Kids today...... :-) (Score:3, Insightful)
You could have said exactly that 24 years ago when I got my first computer (a 16K ZX Spectrum). All most people did with those things was play games; the closest they got to programming was typing LOAD "" and hitting enter.
It was only really those of us that not only did that, but also typed in program listings (in BASIC) from magazines that went on to experiment with writing code ourselves. My parents didn't provide me with programing resources (although from memory, the Spectrum came with a BASIC manual), or particularly encourage me to experiment, I did it all off my own back. Of course, being me, they didn't *need* to encourage me; at times, it was all they could do to stop me taking things apart to see how they worked...
Don't forget "Insightful" (Score:3, Insightful)
Parent is dead on in so many ways. Programming is all process (teh P in CPU). Our societal demand for convenience and instant gratification has many victims, but one of the saddest is the general level of intuitiveness among kids & teenagers. Accomplishing something requires steps (an algorithm, if you will). If you generally have accomplished everything by pushing a single button, your ability to analyze a problem -- viz., break it down into steps -- languishes.
Later in life (in the unlikely event you actually get a job coding) you become one of those guys that just throws hardware and buzzwords at everything
Re:Kids today...... :-) (Score:2, Insightful)
Of course you could just point and click in an IDE and have a 250M app that provides you with a windowed environment and voila the same functionality but with theme music and a spinning globe in the background. You'll still need the same 30 lines of logic.
Sorry I had to ...
When I were a lad we had to buy Spectrum magazine and type in pages of uninteligable register commands, then we'd run the program and we'd discover we mistyped a garachter on the first page and then you'd go to bed and try again tomorrow, but you tell that to young people today, and they won't believe you!
Re:Kids today...... :-) (Score:4, Insightful)
python
Python 2.4.3 (#2, Apr 27 2006, 14:43:58)
[GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hello, World"
Hello, World
>>> 4 + 4
8
>>> while True:
sex
sex
sex
sex
sex
[and so on]
Then, when this gets frustrating, teach the rugrat how to save the program in a file, and run it that way.
I've been reading over the many, many letters that this article generated at Salon, and I'm blown away by the sheer number of people who claim that BASIC programs are somehow interacting with the computer on a lower level than C++, that BASIC somehow underpins the whole object-oriented system. Can someone explain what they're talking about?
Re:Kids today...... :-) (Score:2, Insightful)
You could load a game or write a program.
Nowadays you have to choose before bootup (consoles) or go out of your way and find the language.
Perl objects (Score:3, Insightful)
Perl seems to fit the bill, since it can be as simple as you want and doesn't even have the type issues Basic has.
Object oriented perl is a wonderful was to learn objects. Wait don't scream. I said "learn". I'd been object oriented programming for years in Java and other languages. But I truly did not understand how all the pieces worked till I wrote perl objects. In perl it's like one of those "visible man" models. You learn how inheritance works. You learn how binding of an instance to a class works. You understand closures for the first time. You understand how the namespaces are kept separate and how instance memory is allocated. It's not just some voodoo that simply works, like in JAVA. Moreover all of the voodoo is not out of reach but right there for you to mess with. An instance can change it's own inheritance if you want it to. An instance can create a new method and write it into it's own namespace if it wants to. An instance can trap calls to it's own methods and redirect them or intercept calls to methods that don't exist and respond to them.
Those features are not unique to perl (for example pyhton implements objects identically to perl). The difference is that All of that object management occurs in perl itself and is not hidden behind syntactic sugar (like python and java). You quickly appreciate what dereferencing costs, etc...
The other thing that is nice about perl for learning is all of those prefixes like $ @, and so forth. They may make perl look like cursing but they force you to think about what a variable is. When I index out an array, I get what? an array? no I get a scalar, so $X[2] is how I index @X. You can look at someones perl program and if it's written well tell what every word is. You cannot look at a bare name in python or java and tell if it's a method, an array, a hash, a scalar or reference. Perl you can. (Oh and by the way let me explode a perl/pyhton myth. python has more special markup characters in use than perl, the main difference is that in python they are suffixes instead of prefixes and are overloaded with multiple meanings--try counting how many modifiers there are some time (e.g. () , [] ** and so on))
Now once you learn perl objects. Well it's time to put down the perl and back away slowly. Python, java are much better languages for writing re-usable, easily read, complex object oriented programs. Perl is still a much more powerful language than either. But it's powerful for efficiently creating compact or single use programs quickly. Not for well designed complex systems.
Re:Kids today...... :-) (Score:3, Insightful)
While I'm at a loss to explain Brin's obsession with BASIC, I think that you and Brin are saying the same thing. There isn't much exposure to the inner workings of the computer by default. If you have Linux, the kid might have a chance, but what comes with Windows by default? cmd.exe? Yech. More important, even on Linux, there is no need to touch the command line in order to do all the fun, eye-popping things that computers are already trained to do. You could become quite adept at manipulating your computer without learning anything about how the computer operates.
Nor do most kids have an adult on hand to guide them, or even get them started. If a kid tells his parents, "I want to learn to program," they might go out and buy him a computer, then scour all over the Start Menu for the programming program. Teachers generally aren't any better when it comes to knowing how to get a kid on the path to 1337-ness.
I'm trying to think what a simple programming curriculum for grade schoolers would look like. What programming language would I use? What concepts would I try to teach, and how would I make them comprehensible to the rugrats? I think I'd start with Python, teaching them to use it as a calculator, then teaching them to output, then teaching them to get input and use it as output, then basic program flow. Objects would be a whole big ball of wax that I might not want to start them on straight off...
Re:Kids today...... :-) (Score:3, Insightful)
IMHO Dijkstra is right and you are wrong.
Hmm, i started on a Timex Sinclair 1000. Ithought for a while i was cool, i had the best alpha geek story around me. Then I moved a couple rows over, and of th3 7 other guys around me, 3 other guys had also started with Timex Sinclair 1000s. Not only did that thing run BASIC, but on a machine so limited it didn't even have a tokenizer, you had to enter your program in a weird pre-tokenized form with BASIC keywords single keys on a keyboard when you were in the right mode. Somehow we were able to get past the mental mutilation and move on to other thngs. I mostly program in C, Shell, and Perl, with some code lying around in C++. The other guys around me program Perl and SQL mostly (i feel sorry for the SQL).
Most of us MS basic in a variety of forms, on the cheap 650x processor based machines of the 80s (Commodore 64, Apple ][, Atari 800), the age this article is talking about.
Dijkstra's quote is a fun thing to banter around when you want to stop debate on BASIC, but in my experience is very wrong. Getting your head around how a computer works, there is a CPU coordinating things, what a memory address is how a parser works, getting exposed to these things early and cheaply and fun is the most important. The language has importance yes, but the jump from being a passive user to someone who wishes to control the internals of the machine and able to make an internal model of how it works is a much larger jump than going from BASIC to say, C.
Python, Javascript. Less common: Logo, Squeek... (Score:3, Insightful)
For example, Python is a very good language for teaching the basics of programming, and it's really simple to learn. Javascript also works.
The old BASIC that he probably remembers (e.g., what ran on Apple IIs, etc.) was actually pretty nasty; functions didn't have parameters, loops were primitive, you couldn't create your own datatypes. You had to UNLEARN a lot of stuff. Yes, modern BASICs are better, but they're now competing with many other also-good languages.
Re:Python?! (Score:4, Insightful)
For kids, simple graphics are far more persuasive than watching text scroll down. If your answer for doing this in python is longer than 1 line or involves compiling packages, you've lost. Basic commands I remember were as simple as "gr", "hgr", "hgr2", "screen" and you were ready to go.
Re:Kids today...... :-) (Score:4, Insightful)
I look at it like this: being a programmer is to computer literacy what being an expert mechanic is to the ability to drive a car. We don't need a society where everybody knows how to write software, just like we don't need a society where everybody knows how to rebuild a carburator.
Of course, I think it sucks that Windows doesn't ship with a C++ compiler (or whatever, language is not the issue). The anyone willing to do a little tinkering can have the tools they need to write some code quickly, and for free, on the internet. They just need a little encouragement and mentoring.
Johnny can't play chess. Johnny can't appreciate Fellini films. Whatever. If Johnny's not into those things, then he can pursue something else. The whole "Johnny Can't Code" thing is just nonsense. So what? As long as a kid learns to effectively use a computer, which in todays society means being able to navigate an OS, use a word processor, and run a browser and email client, they're going to be fine. For those of us who enjoy it, there are great and promising careers out there, but don't try to push it off onto everybody else.
Re:Kids today...... :-) (Score:2, Insightful)
The "scripting" languages that serve as entry-level tools for today's aspiring programmers -- like Perl and Python -- don't make this experience accessible to students in the same way. BASIC was close enough to the algorithm that you could actually follow the reasoning of the machine as it made choices and followed logical pathways.
What the author describes here in the article is just the specific 'sweet-spot' that existed for him and many others 20 years ago, but it wasn't necessary. I'm sure 20 years ago people were complaining that learning this code was not right - you needed to know the actual machine code, or the layout of the processor internally, what registers mean, etc. There are always levels of abstraction, but attaching such and important meaning to "the way I learned things" when there really isn't one is kind of meaningless, I think.
Re:prof.dr.Edsger W.Dijkstra Is An Idiot (Score:3, Insightful)
I know who he is. But if some guy tells me that the sky is normally a lovely shade of salmon, I don't care if he has a list of credits a mile long. When he says that, he's being an idiot. At least at that point in time.
I'm a pretty smart guy. My IQ is comfortably nestled around 140. But occasionally I, too, am an idiot.
Re:CS a branch of mathematics? (Score:3, Insightful)
Seriously, I can't imagine developing software without at least a passing familiarity with discrete math. It's not that hard (I found it easier than trig, but then I suxx0r3d at trig), and it teaches you how to think about the kind of problems that are common in programming (e.g., graph traversal).
Re:Absolute nonsense (Score:3, Insightful)
It's even tricky to change it by doing "file-save as..." unless you know what you are doing, most likely you will end up with hello.vbs.txt
So it's not as straightforward as you make out. In fact they have made it deliberately difficult to do what you describe. They seem to want to preserve some sort of idea of the intrinsic nature of different types of files for users.
Given that it's one of the standard ways to create a new file of the type you want, it's exactly what they should have done if they wanted average people to program. It's precicely lack of availability that's the problem. You could hunt using the standard windows interface and never discover that there was a way to do what you describe (trivial though it is).
Re:CS a branch of mathematics? (Score:4, Insightful)
I agree that this applies to programmers.
I disagree that this applies to software engineers.
There is a big difference between the two.
The point of all the math is to make the subject sufficiently academic that it is acceptable to universities, who are scared by anything vocational.
Universities are not scared by anything vocational. However, it doesn't fit with their role in education. If you want a vocation, go to a community college or something else. They will teach you the "hot" programming language, environment, skills, etc. However, these things are fleeting. What are the hot areas today? Ruby on Rails? Security? LAMP? What was it 5 years ago? Java?
Now, if you get a solid grounding in theory and skills that apply to different areas, it doesn't matter what the hot area is. You can use your foundation and learn that area quickly. If you have a solid background in programming, including different languages, picking up a new language is easy. If you have a good grounding in networks and OSes, then picking up security is much easier. So, universities don't aim for the hot areas, they aim for giving you the skills and tools to be successful in the long run.
Re:Kids today...... :-) (Score:3, Insightful)
What do you think a procedure call is, if not a Gosub? What do you think an if statement is, if not a JNE or JEQ?
Re:CS a branch of mathematics? (Score:3, Insightful)
I cannot emphasize enough the quote from the CAIP quarterly on mathematics, paraphrasing: "I tell my students to listen carefully when they decide to take their last mathematics class. They may be able to hear the sound of closing doors."
Most everyone in my office wishes they had more mathematics in school, most people who majored in economics say they would kill for the differential equations my school forced econ majors to take, and many professors in Ecology who are doing simulation wished that ecology grad students had a firmer background in mathematics. Its everywhere, but if you lack training in it then of course you will never use it or be required to use it.
Re:What happens when complexity gets out of contro (Score:3, Insightful)
if there were a catastrophic event that destroyed most of society, very few people would have enough knowledge to rebuild what we currently have.
True and unavoidable. Unless we go back to the caves, so "rebuilding" would be easier.
Therefore, I believe that we as a society are getting dumber because we need to know less
Collectively we know far more than we did in the past, and thus the percentage of that knowledge that any one individual can have is less.
because modern medicine can keep nearly anyone alive long enough to reproduce, I'd say that evolution of the human species has stopped
Give biotech a few decades.
Re:Don't forget "Insightful" (Score:5, Insightful)
What kids are after is fun. I did a ton of programming when I was a kid, and I never seriously considered doing it for a living until after I graduated from college. It was just fun.
What's missing is that programming languages used to be built into the computer. For me, BASIC was there when I booted up the computer. Documentation aimed at complete beginners like me was the norm. It would have been hard *not* to program.
These days the easiest way to start out would be with Python. It seems simple to us, but...
1 - know it exists
2 - know how to download the right version for your computer (not a mac or linux version)
3 - find the installer and know to run it (and know that it's safe)
4 - figure out how to invoke the installed program (ok, that one's easy)
5 - find documentation written for beginning programmers
6 - figure out why python won't run the programs you saved as
Can you imagine an eight-year-old Windows user with clueless parents doing all that by himself?
I didn't have to download anything or know anything about operating systems. I don't remember having to sort through tons of titles like "Advanced BASIC Beowulf Architectures in 2 Minutes for J2EE Certified Hardware Astroengineers" at the bookstore to find one that was right for me. In fact, I'm pretty sure the book I used came in the same box as the computer. Plus, all the computer magazines had program listings in the back that you could type in.
Microsoft would earn big brownie points with parents if they included an extremely simple IronPython-based (or even Logo-based) "Learn To Program" IDE with every copy of Windows. Twenty years ago, people knew how to write documentation for beginners. (Not children or computerphobes. Not people with congenital learning disabilities. Just beginners, of all kinds and ages.) I'm sure it could be done again.
Re:CS a branch of mathematics? (Score:1, Insightful)
Computer science is the mathematical stuff. It's learning how to develop and analyze algorithms, and the theoretical foundations of computation. A good program will have some AI and decision theory, which is definitely mathematical. Even in an operating systems course, you won't spend your time digging through kernel code. You'll instead learn about the general problems that such a piece of software has to solve, and which ways are most effective for dealing with them, given your particular goals.
It's most definitely not about learning a bunch of particular tools/languages. An introductory course would probably be concerned mostly with teaching a specific language, along with the basics of programming, but beyond that, you're mainly expected to learn the tools on your own. The tools are useful for experimenting with and gaining understanding of the underlying concepts, but it's the latter that is the purpose of the curriculum, not merely to train you in using the tools.
So, the slashdot consensus is correct in that a heavy mathematical background is not necessary for hacking together a word processor, or writing a database front-end in PHP. However, such activities aren't exactly the domain of computer science, and you really don't need a degree in it to work on such projects.
Chris Pine's 'Learn to Program' (Score:2, Insightful)
http://pine.fm/LearnToProgram/ [pine.fm]
I'm going to give this to my niece when she's a bit older.