Why Johnny Can't Code
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."
I have been thinking it is due to a few reasons. First off, it seems that math education is sorely lacking in many college students. We are waaaay off the mark here with lots of remedial work being necessary for entering college students and this is having a major effect on peoples ability to develop algorithms. The next major reason is lack of communication skills and writing skills. When I was a grade school kid learning BASIC, we had it drilled into our heads that we had to comment our code and explain exactly what it is that we were planning. This was done to help us learn how to think through a problem, but also to get us to help communicate what it is that we were trying to do with our code. Finally, it seems that many students have gotten lazy and are simply looking for an easy way out and not wanting to code line by line.
Visit Jonesblog and say hello.
I started on the Apple ][ with Robot Wars. I loved programming those robots so much, that I later wrote my own port of it for Windows. I still have it out there for free with it's own BotBasic language. It still gets some hits and positive comments from punters.
Please provide a URL that does not require signing up to crap.
Obviously with 25% of CS classes using this simple line computer languag eyou did nto look hard enough.. See D Knuth's homepage for details..
Fred Grott(aka shareme) http://mobilebytes.wordpress.com
I submitted the same story, and also made the following comment elsewhere:
It is worth noting that Microsoft ships Visual Basic for Applications
with most of their software (at least they did when last I checked), and
OS X and many Linux distros ship Python.
Having said that, I agree that the world has changed and getting started
with programming isn't as natural as it used to be. Part of the reason
for that is that our expectations have changed, but languages haven't
really caught up. Nowadays, we expect programs to present us with fancy
GUI widgets. If all a program does is print some text to the terminal
and read some input from it, we don't feel we've written a real program.
However, in the majority of programming language, creating these fancy
GUI widgets is much more difficult than doing terminal I/O. Thus, either
the rewards are less, or the barrier to entry is higher.
On the other hand, there is HTML, which makes it very easy to create
user interfaces, but the user interfaces are somewhat limited and adding
in program logic can be very tedious.
Fortunately, software vendors are not sitting still. Konfabulator, Apple
Dashboard, gDesklets, Oprera Widgets, KDE's Dashboard, and Mozilla's XUL
(which is supported natively in Mozilla browsers, in Opera and MSIE
through plugins, while native support is being added to Konqueror and
Safari) are all ways to make it easy to create visually appealing
programs and add functionality to them. They are all based around the
concept of creating the user interface in XML, then using a scripting
language to implement the behavior. Indeed, this makes creating GUI
software easy enough that beginning computer users can do it.
I think these widgets are the future, especially once they will be
treated like full applications that live on the same desktop (last time
I checked, Apple Dashboard actually was a separate desktop from the one
that contains the "real" programs).
Please correct me if I got my facts wrong.
What a load of rubbish.
apt-get install \
bash \
python \
gambas2 \
kturtle \
fp-compiler fp-units-base \
php5-cli
The reason children don't code (if that is even true, as it's a completely unsubstantiated assertion) is because they don't want to.
I started programming when I was ten, and I did it by hand-converting Z80 assembly language to machine code and then used BASIC poke commands to write them into memory. I had to work hard to scrape a C compiler from somewhere and that was heaven.
Today it is a million times easier to write a program if you wanted to. Blame ease-of-use culture; blame video games; blame stupid parents; but blaming the lack of access to programming languages is ridiculous to say the least.
Carpe Daemon
on every browser on every computer is javascript. Much better dan basic was. I've seen kids of 9 do incredible things with .css and javascript.
So, just some old people complainging I guess: In my days everything was better!!!!
``At first I wanted to read this and say aha, here's a simple line oriented language''
Why line-oriented?
Please correct me if I got my facts wrong.
So, just in case some of our students read this (its always weird when your students say "I saw your comment on Slashdot yesterday"), I should have mentioned that there are exceptions to the rule (obviously) like the developers who are developing some of our image processing code right now here at the Univ. of Utah Scientific Computing Institute and our collaborators at the UCSB Center for Bio-Image Informatics. These folks are doing amazing things as is the neuroscience grad student in our lab who routinely amazes me with his ability to code. But these folks are in these graduate programs and environments because they are interested in solving innovative and new problems and they enjoy a challenge. The vast majority of students who are learning to code are not interested in asking questions or doing hard things. Interestingly, a large number of students it seems coming into CS programs at the undergraduate level want to program games, but have no idea how much math and algorithm development goes on when one is crafting new material. It's easy to use someone else's engine or physics models, but coming up with your own is harder and requires some talent and dedication to learning your craft.
Visit Jonesblog and say hello.
There's a very easy solution to this. Install a classic machine emulator on your PC. Something like a C64 emulator would work fine.
GreyPoopon
--
Why is it I can write insightful comments but can't come up with a clever signature?
I agree many peoples do not have the good way with maths or sciences, but truth can to found elsewhere? Many peoples now using point and click for the programming, maybe they not having the good feel for such studies before, but now they can be introduced! They become more interested, and this makes the first interest of programming among peoples at a later age when Johnnies are older.
What about languages like Ruby, Python, Bourne shell, etc? Easy to pick up (the barrier of entry to shell scripting is especially low), and you can take them all the way up to complex programs with GUIs (whether you should want to is another matter, especially for shell scripts).
Please correct me if I got my facts wrong.
http://www.google.com/search?q=Johny&start=0&ie=ut f-8&oe=utf-8&client=firefox-a&rls=org.mozilla:en-U S:official
Johny is a name, and perhaps someone named Johny can't code. I hate it when people get bent out of shape over how someone spells a name (especaly there own name).
By the way:
John
Jon
Jonathan
Johnathan
Jack
Johnny
Johny
Go troll the Games section with irratonal Wii love.
I don't give a damn for a man that can only spell a word one way.
Mark Twain
I was working with C when I was nine years old, and everyone knows I'm an idiot, a complete idiot, the dumbest little pissant who ever lived. Hell, 99% of kids are smarter than I am today. If I could do it, the dumbest kid in America could.
http://www.nicholson.com/rhn/basic/
How about bwbasic (https://sourceforge.net/projects/bwbasic/)? It's available for my FreeBSD system, my Ubuntu system, even MS-DOS... Sure, it might not be as über-sexy as buying a second-hand C64, but it's there for you to try BASIC programs..
Intosi
If you really want to play with BASIC, you still can. There is Freebasic, at http://www.freebasic.net/, a GPL'ed open source BASIC compiler.
You forgot one alternaty spelling for Johnny, Nny.
"MIT betrayed all of its basic principles."
Check out this interesting blog by Peter Cooper, where he suggests a Ruby environment fors kids:
Taking Ruby to the kids
Mark Kretschmann - Amarok Developer, KDE Member
When I was in college, we started off learning different assemblers (PC and Mainframe), then we moved to C and C++. The same college, now starts teaching kids some RAD languages, Java, C# and whatnot. IMO, new students no longer learn the basis of the computer, how the CPU works, how compilers work and how interpreted code works.
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.
I started programming in Basic on old Thomson TO7 computers when I was ten, then a few yaers later I switched to Pascal on an Olivetti PC, and it was always to build my own games : I had little pocket money to buy my own games, I had no access to any network whatsoever, and software piracy was not my favorite pastime (and would have been frowned upon by my parents).
So there. And if it hadn't been for that early programming itch, I would probably not be an IT consultant/developer these days.
In Soviet Russia, our new overlords are belong to all your base.
You're not an "old fart" if you started with edlin. There was life before MS-DOS, you know. Now, get off my lawn!
Am I missing something here? Why doesn't python count? It's easy, has a nice "line enter mode", embraces many advance programming concepts from various programming paradigms(OP, Functional, Procedural, etc). And has a bunch of nice Graphical hooks for the eventual game programming your little one will end up doing.
Disregarding Python, what's wrong with Emac's elisp or a nice session with tcsh. You'd be hard pressed to find a computer that you couldn't run one of these languages on and I've just barely scratched the surface of possibilities
No I'd have to say that today's children are given an even richer programing environment to grow with than we were.
--Steve
As coding goes from being an elite craft that few can do into a blue color job that few bother to want to do
As hand made articles become assembly-line products
we wonder why the world has changed and our tools with it
The Original Post didn't mention that I thought it might be of interest to some people to know that ahead of time. Perhaps influencing the descion about reading it or not.
Power Corrupts,Absolute Power Corrupts Absolutely, leaving one person(group)in charge is absolutely corrupt.
"you wanna play with computers? program them first sonny."
... if you're handing them a new Dell box with a Cable modem and a XBOX360 or something.
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
Someday, I'll have a real sig.
The author is David Brin, is he the SF author ?
The Wise adapts himself to the world. The Fool adapts the world to himself. Therefore, all progress depends on the Fool.
From the article:
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.
If Johnny can't scan through a Python program and follow the logic, maybe he isn't quite ready to tackle computer programming...
Why, when I was a young programmer we had to write the code in the snow with our pee, and a compiler was just a word for the pilot of the hovering dirigible that read the instructions and passed them to the ALU, which was another fellow with an abacus. They would wrap the results around a rock, and drop it on my house when the program would exit. We had to walk uphill...
Content Management System: A pretentious way of saying "text editor."
Games.
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.
Beer is proof that God loves us, and wants us to be happy.
Are you seriously telling me that with languages like VB.net, C#, Ruby, javascript and other 'easy' languages, kids can't learn to code these days? I call BS on this. Sure, I started on an Apple IIe in 4th grade, and gradually moved up to real languages (C, PHP, etc etc) eventually, but that doesn't mean the 'lack' of BASIC stops kids from coding.
There are even languages developed solely to interest kids in programming.
http://www.kidsprogramminglanguage.com/
http://en.wikipedia.org/wiki/Alice_(software)
I'm sure there's more out there, but Alice was the one I remembered, and found KPL on the way.
No, there are no more barriers to programming than any other science.
"If you make people think they're thinking, they'll love you; But if you really make them think, they'll hate you." - DM
``First off, it seems that math education is sorely lacking in many college students.''
I won't argue that math education is not what it could be, but I doubt it's what causes people not to program. Math and programming _are_ different disciplines, and you can have either without the other. Even if math skills help programming a bit, it certainly isn't the _first_ reason for people not starting to program.
Please correct me if I got my facts wrong.
If I was not capable of using google and wanted a BASIC clone for my son that badly, I'd write one. A BASIC BASIC (sic) could be hacked together freetime within a couple of weeks, but since I can use google I'd probably just download one of that thar newfangled intarweb thingy.
When I was learning using Sinclair BASIC on the ZX80, 81 and Spectrum, I would have killed small domesticated animals for something as cool as javascript. What a rediculous article.
Take a look at 'Processing' http://processing.org/
If that doesn't inspire potential coders to start playing around with programming I don't know what would.
Yes, but... what about Johnny Carmack?
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!
This is due to industry pressure, companies don't want to hire people who understand the compilers, they want people who know C++, C, Java, SQL, PHP... so colleges to keep their job placement numbers have decided to modify curiculums to match... so very sad, I wish i had learned about compiler design and cool stuff like that in college...
How about scripting? It isn't as powerful as the current popular languages, but perhaps nearly as powerful as BASIC. You can certainly get a hell of a lot done that way, and it's trivially easy to get started. Anything you can type on the command-line, you can put into a simple text file, and run it.
.cmd files run everywhere, which include many of the features BAT files lack...
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.
Slashdot gets worse every day... Pipedot: News for nerds, without the corporate slant
... for a used C64.
:
There are quite a number of those wonderful things called emulators
http://frodo.cebix.net/
http://www.computerbrains.com/ccs64/
http://www.viceteam.org/
and even a Java one (in fact, it's an applet) : http://www.dreamfabric.com/c64/
Someone needs to write a new paper for the peer reviewed journals to counter this paper in light of the "Johnny can't code" factor.
I suppose they could title it "Lack of Go To Statement Considered Harmful"
Actually perl has a goto statement , so feel free use perl like a line programming language if you really want to.
-- 3 events that reshaped the world in the 20th century: WW1, WW2, and WWW
Saying the lack of line based languages is the death of programming is like saying the problem with farming is all those damn tractors. Oh wait, don't tractors make things BETTER? We've obsoleted the donkey in farming, and I don't think that was the death of farming.
It's called P-R-O-G-R-E-S-S. It's the reason we don't live in caves anymore.
There's a _reason_ we don't use line numbers anymore. Yes, I started on a Commodore PET computer with BASIC, so don't say I'm out of touch.
Devil's advocate time: Remember Computer science isnt about the plumbing; its about abstraction, algorithms and problem solving ability. Modern platforms allow modeling and thinking at a much higher level - instead of focussing on low-level arcana.
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.
From TFA:
Yes.
The writer of TFA is whining that computers no longer ship with a BASIC interpreter. That's been true since Microsoft shipped Windows 95--and at the time (which, er, was 1995) a number of columnists (including me) noted the loss, and wondered what impact it would have.
Eleven years later....
The earth still continues to revolve around the sun, and kids are still learning to write code. They're not learning to write code by typing in exercises from a math book--they're learning to write code to develop macros in Excel (or OpenOffice Calc); they're learning to write JavaScript to enable custom functionality in Adobe Acrobat files; they're learning to write HTML.
Not to get all pedagogical on you, or anything...
But this may be a circumstance where the Education Establishment is doing something right. Typing code into GW-BASIC produces...what? Typically, an output value. Read these input values, produce that output value. That's a CRT-based emulation of a deck of punch cards--and while I believe I benefited enormously from learning to code on punch cards, very very few people in the programming world agree with me. Think about what the newbie programmer's early coding experiences are like:
That experience--being able to compile and run a program in something like real time, was HUGE--in 1974. Nowadays it is so outdated that I'd bet most kids would not see any correlation between that and a computer program that they are familiar with. How do you explain to a ten-year-old that the BASIC exercise from the math book is essentially identical to the internal processes of a video game, a web server, or the embedded micro-processor that drives your microwave oven?
By contrast, a web page is a terrific introduction. Open a simple web page with "View Source", modify the text, and display the new page--it has changed. Iterate several times--add paragraphs, change colors, play with fonts--and the kid gets it. Playing with a text editor (which, incidentally, still does come for free) the student can go a long, long way in HTML. Depending upon his or her interests the student can pursue graphic design, animation, AJAX programming--all sorts of stuff. Key point: the difference between a "Hello World" HTML page and EBay is only a matter of degree--and that is immediately obvious to the student. Making the mental link between an ancient BASIC program and--for instance--a Windows application developed in Visual Basic.Net is not obvious at all.
A case in point...
I have three daughters. Growing up in a house with more computers than people--and a T1 connection to the Internet--they have had more exposure to computers than most kids. The oldest two are in college, and both had summer jobs this year at the electronics company where I work. Daughter #1 worked in customer service role--spending a lot of time with Excel spreadsheets. Somebody asked if she could program--she replied that her dad was a programmer, but she didn't really know how to. As she said this, she was writing Visual Basic macro scripts to automate a lot of manual key-entry for the customer service staff. What she was doing was very similar to the old-fashioned "get input, produce output" coding that punch card decks and BASIC programs performed. But the IDE (in this case, Microsoft Visual Basic for Applications) and the paradigm (a GUI) made it extremely easy to understand and do. So easy, in fact, that she didn't really equate it with programming.
In other words,
Don't mourn for GW-BASIC. Spend time with your kids writing HTML, JavaScript, and Excel macros.
Why not something like Squeak (www.squeakland.org). More dynamic than basic HTML, easier than writing applets.
You should know that the University of Utah has a long history of academic excellence in computer science. People like John Warnock (founder of Adobe), David Evans and Ivan Sutherland (founders of Evans and Sutherland), Robert Barton (principal architect of all Burroughs computers), Tom Stockham (created digital recording among many other things), Alan Kay (GUI guy at Xerox PARC, developed Smalltalk and is a fellow at Apple), Chuck Seitz (pioneer in asynchronous circuits), Ronald Resch (pioneer in computer art), Alan Ashton (founder of WordPerfect), Tony Hearn (developed the oldest algebraic math package, REDUCE), Duane Call (designer of the FPS-120 supercomputer and vector calculation specialist), Henri Gouraud (developed the Gouraud shading methods so important for all your games), Elliott Organick (Founder of SIGSCE and author of many FORTRAN and CS textbooks), Buit Tuong-Phong (invented the Phong shading method), Ed Catmull (computer animation pioneer and co founder of Pixar), Jim Clark (founder of Silicon Graphics, Netscape and Heatheon/WebMD), Henry Fuchs (founder of Pixel Planes and researchers in high performance graphics software), Martin Newell (object rendering and founder of Ashlar and co developed the Painter's algorithm for surface rendering), Frank Crow (famous for his anti-aliasing methods for edge smooting), Martin Griss (developed Portable Standard LISP), Suhas Patil (founder of CIRRUS Logic), James Blinn (Invented the first method for representing surface textures in graphical images. Scientist at JPL, where he worked on computer animation of the Voyager fly-bys), Jim Kajiya (Developed the frame buffer concept for storing and displaying single-raster images), Robert Johnson (Invented the magnetic ink printing technology used on virtually every check we write), Brian Barsky (Developed beta splines and methods to link computer graphics, geometric modeling, vision science, and optometry) and so on and so one are all graduates of our program.
Visit Jonesblog and say hello.
for putting his "i" out.
KFG
But computers are not new and exciting any more. They are commodity machines which provide standard services which you pay for.
Deleted
One very useful tool when learning to program, at least for me, was an intergrated debugger. The ability to step through the code line by line, looking the values of variables at each stage and see how the code branches is a great for internalizing the logic of how a language or algorithm works, and learn to run through the code in your head just like a debugger.
Comment removed based on user account deletion
first off, it seems that math education is sorely lacking in many college students. ... The next major reason is lack of communication skills and writing skills.
There's a story about Abraham Lincoln when he was a cogressman. He received a questionnaire sent to new congressman in which they were supposed to give background information about themselves. When he came to the question which asked for a description of his education he filled in a single word: "deficient".
In fact, Lincoln felt the deficiency of his education so keenly he began an independent study of Euclid's Elements, with the intent of sharpening his thinking. Reportedly he mastered the material through book 6, which means everything relating to plane geometry, but not number theory or solid geometry. I'd argue that Lincoln's formidable intellectual accumen, whether it stemmed from his study of Euclid or from his native faculties, is often missed in the sentimental haze that surrounds the man.
The point of these anecdotes is this. There are certain areas of knowledge where thoughtful persons would have to label their education "deficient", any accomplishments they may have in them notwithstanding, because they are bottomless sources of utility. You just named two of them: mathematics and communication.
The need for remedial classes at the university level doesn't come from a degeneration of the educational system. It comes from a social and economic change which makes a bachelor's degree a minimal requirement for decent employment. Fifty years ago, there were two kinds of people who went to college. The socially elite, for whom a "Gentleman D" was perfectly acceptable. Arguably the societies they joined and contacts they made were the most important reasons to go. And the intellectually elite. The middle class, non intellecutally elite student got a job, often in a factory, which maintained him in the middle class and did not require a degree.
The growing need to have a university degree in the last half of the twentieth century led to the perennial concern of declining college board admission test scores, from which it was concluded that primary and secondary education was deteriorating. However, it's important to remmeber that average scores are average scores of a population sample, and if the population being sampled changes, you can't compare the scores. Adjusted for demographic changes, there was no decline in scores. There literally couldn't be, because of the little known fact that the tests and scoring scales are continually recalibrated by the testing agencies to ensure that students in any given segment of the academic population score the same from year to year.
However, we have been the beneficiary, first of the Sputnik scare, then the SAT scare. For most students, education is actually much more rigorous today than it was fifty years ago. I went to elementary school almost forty years ago. My school was unusual in putting a great deal more emphasis in critical thinking and reading skills. My children go to an elementary school where the reading curriculum is much more challenging, and the math curriculum requires that students be able to reason mathematically and recognize situations where various mathematical techniques need to be used -- a huge improvement over the education of my era, which graduated countless students who could regugitate the quadratic equation forumula but had no idea when it might be useful.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
Are we still allowed to get bent out of shape when people misspell "especaly"?
Censorship is telling a man he can't have a steak just because a baby can't chew it. --Mark Twain
Wouldn't one of the free Commodore 64 emulators out there be a better solution than buying an old computer?
It seems to me Brin is not quite on the mark, but heading in the right direction. What was great about learning to program 24 years ago was the total control you had over home computers of the time. There was only the thinnest of abstractions separating you from the low-level mechanisms, and you frequently had to had to bypass the abstractions to get anything cool done. At the same time, the low-level stuff was pretty easy to understand -- poke a byte here, something appears on your screen, poke a couple of bytes over there, you have a sound.
Contrast that to present-day machines. If you are programming graphics in C++, you are probably working with a working with a library of some sort, which talks to one layer of the OS, which talks to another layer of the OS, which talks to the video card's interface, which talks to the hardware. It lets you do fantastically powerful things, but with a steeper learning curve and a major loss of detailed understanding of what the hardware is doing.
The darth side of programming?
Wondering why i am doing so strange posts? I am trying to get a "+5,Flamebait" or "-1,Insightful" rating.
The editors for 3d games are unbelieveably powerful. I remember spending many an hour tinkering with the original Unreal editor. It was easy for even a novice to use a getting started tutorial to build their own map/level/world.
The editor presented the world as a 3D solid and you would cut away "rooms" and then apply textures. You could easily make an in-door or outdoor scene complete with sky, water, light sources, etc.
You could put together simple shapes to create complex objects, then script them easily to move around or even react to the player character in the game.
To really get complex reactions from the environment, or to get the lighting/shadows right required some understanding of basic math/trig, but even that is not that hard and the tutorials pointed you in the right direction.
This is about as close to the "wow factor" that I got from doing simple shapes on a TRS-80 back in the old days. Coding up your own version of Bezerk was awesome. Creating your own worlds and getting to explore them was almost as thrilling.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
I dont get it. QBASIC.EXE is readily available from a local website near you. Last time I coded QBasic was 2004 for shits and giggles at Birdie 13 Uppsala/Sweden.
This entire article is just pure whining. Getting a C64 because of that? Whats the point? I just dont get it. If you want to code in basic that is hardly a problem. That people choose to not do that and use a fancy GUI or just learn how to code HTML instead I can understand since thats what "IT-people" do today.
I totally and completely disagree. The issue is one of pedagogy--which language can kids learn at an early age? I was coding 1000 line programs in BASIC at age 8, and I wasn't alone in that. BASIC is an easy language to learn. Is it limited? Definitely. Would I prefer today to code in BASIC instead of the Perl, Matlab, and Fortran that I now use? No. But the author's point is about _learning_ to code. Perl isn't terribly easy to 'learn' nor are c or c++ or java, at least not to an 8yo.
I wonder if this CS is a branch of mathematics approach also puts people off. Personally I think there is much less mathematics going on at the programming level than college lecturers like to think. It is like the old saw that a dog that catches a ball is solving a 2nd order differential equation in real time. No its not, it is catching a ball. Similarly a program is more a logical story than some mathematical adventure.
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.
This is just a natural evolution. The same situation exists in hardware design. Very few young people can whip up a useful circuit with resistors, capacitors, and transistors. At my company we have 1 or 2 "dinosaurs" who invariably get called upon to solve problems in the hardware when it gets down to this level. Everyone is amazed when they throw together a quick little circuit with a breadboard and a few hand-soldered components. The simple fact is, more people don't learn to do this low-level type of work because there is not as much need for it anymore. But, and here is the rub, there will always be someneed. We'll always have to have a few folks around who understand the fundamentals. One could imagine as things continue to evolve, that these "low level specialists" could become quite expensive.
The more you regulate a company, the worse its products become.
I am a parent of a 10 year old boy and 7 year old girl. My son and I coded our first BASIC stamp robot (Parallax Boe-Bot) last year. He has since taken an interest in his 300-in-1 electronics kit, and modifying the games he plays on his Knoppix for Kids distribution (he often runs that over the Fedora and Ubuntu distros also available in the house). A few days ago he asked me how a web site works, so I am going to teach him a little html this weekend.
My daughter plays the piano and has access to a MIDI keyboard. She and I have had a couple conversations about MIDI and was fascinated by the paper pipe organ we built. I just started designing a small, networked, pipe organ with the hope of demonstrating some programming and networking concepts to her.
We have also built rockets, a trebuchet, and even kept bees together. I plan on dusting off my homebrew equipment soon.
Children are never bored by the possibilities of technology. They need only to be exposed to something more than closed and highly polished consumer products. Even THAT is a wonderful lesson in repurposing if there is a hack around who cares to show them.
First entomology, then virology, and finally bioinformatics systems. Bugs follow me wherever I go.
There are lots of shell type langages that you can start up and start typing in lines of code. One could consider a command(dos) prompt one of them (yuk). You can also use other languages that have shells like Perl and Jython/Python. Bourne Shell scripting is also another type. All of these languages allow you to just start typing in programs and executing them as well as write them to text files and execute them over and over again. Joe
When a man lies he murders a part of the world.
I started with BASIC, Inmos-Assembler, Motorola Assembler then C. Later on I had a hard time abstracting from the machine when I had to learn LISP and Prolog because the "machine thinking" was burned in my brain.
But I know if I first had learned LISP or Smalltalk then the way down to C, Assembler, Machine Language, Memory and Registers would have been equally hard.
If I had to start over nowadays I think would start right in the middle with ruby (more abstract than C, less academic than LISP). But I would never ever start with a line oriented language nowadays.
The reason why there aren't any line oriented languages is simply because there is no need for them: If you want to do some line oriented things: Learn C und look what the compiler makes out of it.
Assembly is as line oriented as it goes. Especially if youre reading disassembled code through JTAG.
I've my head spinning around jumps and branches to various hex numbers, and cant say line programming languages are dead.
But I do miss GWBASIC's simplicity. Anyone has a raw GWBASIC interpreter for the ARM7TDMI core?
"Give orange me give eat orange me eat orange give me eat orange give me you." -Nim Chimpsky
"I know they're going to be fighting me for my job in a few years to come"
We need to make sure these kids know how valuable these skills are and that they should not be sold cheaply. *wink*
I don't mind competing on skill levels, especially if I have had a decade or two headstart. What I hate is to have to compete on a payscale level. I guess if the employer does not understand the value of that previous experience and they judge you soley on payscale, then the newbie kid developer who will work for $10/hr will win out everytime.
The best revenge in a situation like that is knowing that they will get exactly what they are paying for and deserve.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
I think the main reason that so few kids today get into coding is that computers have become so useable for most tasks, that it's no longer necessary to program much yourself, too many things already exsist. For those of us who grew up in the 80s or 90s, home computers were new, tended to be kludgy and have a minimum of litter gadget type programs to do things that you wanted. The fastest way to create something like a calculator in dos was to write it in basic (and it was a fun exercise). Likewise, I spent many hours doing logo-writer programming on various projects (often for solving various geometry things) that I had. Other things that today we take for granted, like for example saved game editors, were unavailable unless you were able to get a hex editor and systematically edit the game looking for changes.
These days, nearly all those things are included in the OS or easily available via web searching. There's no motivation to code yourself when the solution is a 10 minute google search away. The easy availablity and convenience of the web, and in fact the open source movement with all of the 80s and 90s tinkerer generation publishing their tinkering has removed that motivation that we all had to code in the first place for the next generation. While I agree that there isn't something as compelling and easy as logowriter out there today to get started on, I think the underlying cause is much more based on the sociology.
I find it curious that with all the programming languages listed that Perl was not among them. Has Perl actually fallen that low below the radar, or is it not considered a line programming language? I am not a programmer but have set out to learn some basics, I have been working with shell scripts and Perl for the most part to do this as they were suggested as a good place to start. Oh and I also learned Apple BASIC in grade school, and played with MS QBASIC in win 3.1 and 95. Why don't they teach programming in grade school anymore?
~Petaris "The world is open. Are you?"
Posting anon as I am moderating today (yes I moderated GP +1 insightful). I graduated 6 years ago and was on a CS path. We had to take a compilers course that the professor made unbearably hard and boring; so hard that people often moved to the CIS track just to avoid him. Unfortunate because it is not an easy subject and should be taught by someone with more patience and personality.
.NET and Java jobs are just in higher demand and schools and students are catering to that need.
The CIS track was the fast path to a programming job using RAD languages. While I whole heartedly agree that good programmers should have a good understanding of the actual mechanisms behind the code, that is just not what industry is pushing.
So it's turned out that you can get a CS degree and hope to find a really high paying job traveling as a consultant (after a few years of experience), or you can more easily get a CIS degree and go work for your local bank for moderately high pay.
If we can buy a joystick that plugs into a tv and plays several old video games, how hard could it be to design a keyboard-form-factor device that plugs directly into a TV, has a basic ROM, and a small amount of internal flash storage? Give it a composite video out and a cheap internal speaker and sell it for $30. You could even put a CF reader in it, and sell educational programs online that can be loaded on a flash card and run on it.
Unfortunately, without understanding the basics, all your higher level abstractions get you is unmaintainable abstractions. Understanding the base concepts is necessary to know when to abstract at higher levels, because then you'll understand what that higher level abstraction does for you.
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.
The cesspool just got a check and balance.
I know its far from the most useful language but for programming basic yet useful or cool looking stuff Rapid-Q is awesome and free.
I learned to program on QBasic because: 1) it's all I had, 2) it was very easy to program, and 3) it had a fantastic help file. Rapid-Q is easy to program and has a fantastic help file and there are tons of very simple but easy to understand samples out there.
I think the help files are the key. The ability to hit F1 on every reserved word and see descriptions, parameters, code snippets, and related items is important.
Rapid-Q definately has the ease of programming that QBasic did, plus it wraps around some simple DirectX functions and has a very simple Form creation tool so that people new to programming could definately get to the point where they are making windowed apps with 2D and 3D graphics, sound, interaction with the internet, etc.
I still use it every now and then when I need to make a very simple program and it has to have a Windows GUI so that someone else can use it. It's fantastic tool. I see the REALBasic bought it years ago, but I haven't tried REALBasic. From the looks of it, I'd say thats a great language to start with too.
1 (short ton / firkin) = 89.1432354 slugs / keg
Blame ease-of-use culture; blame video games; blame stupid parents; but blaming the lack of access to programming languages is ridiculous to say the least.
Sadly quite true. The good news is for those of us with will and the patience to dig into the details there's a whole world of cool things we can do that the Great Unwashed will never get. I have a friend who's an EE. Not one of the really out there EE's, she designs simple circuits. It's amazing what she comes up with. Just simple little gadgets. Programming is much the same. With a fairly simple programming language you can come up with some simple but very handy little widget programs.
It doesn't bother me that much of the rest of the world relies on other people to package their functionality for them. Just like it doesn't bother me that most people let government package their water and electricity. If you want to depend on the grid for your power, that's fine. But give me my solar panels, wind turbines and Python any day.
That's our life, the big wheel of shit. - The Fat Man, Blue Tango Salvage
Remember Bill Gates' open letter? The one where he berated people for copying the BASIC port he helped write on a government-funded university computer system? Now think about the past few years, where he has berated the educational system for failing to teach students about technology.
Windows is still the predominant OS in the world. Microsoft could include the classic line entry BASIC with GUI wrapper, with a shortcut on the Desktop of a new installation.
At least 3 of the Linux users I know who have children set up python or perl for their children to learn programming. The problem cited in the article is with the majority of computers today, Linux is a small part of the environment.
Possible ways to start:
1. Write a program which counts from 1 to 1002. Write a program which computes 100! = 1 . 2 . 3 .
7. Compare your procedure with the built in PrimeQ
Those classes have been replaced by Java, where you don't even worry about resource leaks. Hey, garbage collector takes care of it!
If you don't worry about resource leaks then you are doomed to suffer resource starvation the moment your website starts getting a decent amount of traffic. The garbage collector is not a panacea; it means you don't have to worry about calling free() or an object's destructor, but you still have to clean up file handles, db connections, etc. There is no guarantee that your object will ever be reclaimed by gc, and certainly not in time to free up a scarce resource before you run out.
It's official. Most of you are morons.
Um well, there still out there. Really old stuff can run through emulators. You have newer free stuff like VB5 Control Creation Edition, and VB.NET Express. And then you have systems like Freebasic expanding on QuickBasic.
Basic is still out there; though I wish they still included QBasic with Windows.
You say things that offend me and I can deal with it. Can you?
There are dozens of fine linear languages. If anything, there are too many choices.
Basic is OK, as long as you drop the line numbers and stick to the function calls. What's good about Basic is that it's accessable from many useful products, Word Basic, Excel Basic, and there's the Basic called Lotusscript.
There are many good C and C++ compilers and IDE's. I like Bloodshed. It works well. For all the weirdness of C++ and C, it's not a bad language if you stick to K&R and learn the fundamentals.
For the truly bold, search for Hercules/390, an open source mainframe emulator that runs IBM mainframe operating systems and applications. Download it onto a used $100 Pentium IV box and run mainframe compilers and applications faster than the biggest 1980's mainframe.
It's about knowing what to pick. Everything anyone wants is there. The problem is that there is too much blather and distraction and every soft major who "saw" a computer once, thinks they know this business.
Here's a telling story. Recently, I overheard a big dollar, suit-consultant say that the problem with Computer Science curricula is that they don't teach "the important stuff, you know, like Microsoft Office Products, how to use Outlook Express."
At first I was too shocked to reply. Then I thought it was an anomaly. Now I'm not too sure.
In a world where GNU C and the Bloodshed IDE are free, a "writer" is telling nerds that there are no linear programming languages left and that's the reason that kids don't learn algorithm development.
We gotta take back {slashdot, business, the industry, America, the world}, if you can't program in one assembly language, one linear language, and do not know automata theory, please, sit in the corner and keep quiet while your betters make things happen.
There are too many blatherers, meeting attenders, and Dilbert boss-types who think they have an opinion. Let's get rid of them and take over. Who's with me?
-khome-boy
I emulate OO in C and laugh about everybody else!
Ah, well... better living from social welfare and writing code for my own projects than living in a concentration camp for programmers and being forced to turn nightmares into trend-programming-language-realities.
Getting kids to program has far deeper issues than availability of languages. Yes, it's helpful if a language comes with the machine / OS, but it's not the end of the world if it doesn't - you can easily download one if you have the desire.
The real issue is to give kids a reason to program. The first machine I ever owned was a ZX81. I didn't have any storage devices, so everything I ever got the machine to do was from entering program listings from magazines. Even as I moved on to machines like the Vic20 and C64, there were still magazines that gave lots of 'simple' programs for you to play with, and books with simple games (and the games that you could buy weren't so advanced that they made the ones that you took from magazines seem trivially simple and boring).
Without ever consciously deciding to learn programming, I had picked it up simply from my interest in getting bits of electronics to do cool and (seemingly for the time) unusual things.
And that's what is missing now. Where is the impetus for someone to choose to program? Deliver a simple programming language with the OS, and people will most likely not even know it's there, or ignore it even if it is.
Phfft! Who needs to learn how to program when you can make millions just by buying a lottery ticket for US$1!
(BTW, that was sarcasm, although, it is a reality for more and more people.)
Before they did anything else they were writing programs. Simple ones that started the game. Next they were playing with loops:
And er,
There are quite a few simple OSS languages out there that kids could learn on. There are logo implementations (yeah logo!), and some basic packages if they want to do less visual stuff. Unfortunately finding such gems in the sea of the web requires some dedication and time, probably from the parents. Non-geek parents who didn't play with this stuff as a kid are unlikely to figure it out for their kids.
James
(this is offended to the end of comments you post, 120 chars)
One of the easiest to learn programs I've ever worked with was Apple's HyperCard. Although the user interface was clunky and didn't follow Apple's Interface Guidelines very well, practically anyone with half a brain could work with it and create something useful.
However, there's plenty of time in your 4 years of college to learn Assembly, C,C++,Java, and a plethora of other languages. If you're talking about those 1 year career colleges, well, then that's another story completely. You can't learn how to program in a year, no matter how intensive the program is. I've known quite a few people who went to those one year career oriented schools, and they couldn't program their way out of a paper bag. The simple thing is, is that you need a large basis to really understand how to program.
Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
It is silly to suggest that there are no easily-accessible programming languages shipped with computers today; most come with at least two or three (if you count the command interpreter and Javascript), many come with dozens. Anyone with the littlest initiative could obtain free assemblers, compilers or interpreters for dozens more, just by connecting to the Internet. This would have been an embarrassment of riches when I started tinkering with personal computers in the early 1980s. And these languages range from the trivial (e.g. old-style BASIC) to the inscruitable (ADA anyone?). The motivated individual can get as close to the hardware as (s)he wants, with assembler or Forth, or as abstracted as desired, with for example XSLT. What is missing is not a simple-to-use language, but rather a lingua franca: A language that virtually everyone the least bit interested in computers is familiar with and has a facility for running, and -- importantly -- may be used to implement just about anything that people are currently doing with computers.
Put this way, I think that everyone can see the problem and the reason why the author's goal is mere fantasy. Today, people just do too damned many things with computers, and there just is no single language that is appropriate for all those tasks. Moreover, I suspect that the number of kids, or possibly even the percentage of kids who are coding up useful stuff is comparable to, or likely greater than, the equivalent figures when he was copying BASIC programs out of textbooks. And if all he was doing was copying programs out of textbooks and running them, maybe changing a line here or there, such an activity would today just be a tremendous waste of time. Nobody hand-copies code anymore, they download it from the Internet, and I expect that number of kids doing this is huge compared to twenty years ago. The running it, and tinkering with it, still happens, one just gets to that point a whole lot quicker.
I will also say that, if the author thought that learning BASIC was equivalent to understanding what was under the hood of his computer, then he clearly was not around when people were building Altair kits, programming drum cards for an 029 keypunch, or wire-wrapping backplanes. Certainly his elders looked down on his generation of BASIC-writing dweebs as little more than coddled dilitantes who would never truely understand the technology.
I'm sorry, but you just can't go home again.
Ruby is a perfect language to learn programming in. It has an excellent command line mode, and the syntax is easier to learn than most languages. As easy as BASIC, yet relevant for use today, and much more powerful. http://www.ruby-lang.org/en/
There are a number of problems happening all at once.
1. It has not really sunk into the heads of the common man that getting a CS degree is the road to easy money. Many still go into CS for the cash, and are just not suited for it.
2. Programming is like carpentry. Most people can do some of it, but only a few become masters of the craft. There are a lot of kids who have made their own web pages and maybe cracked into some remote systems so they think they are experts. They have no idea what it means to be a Software Engineer.
3. The schools are busy teaching Math, not problem solving. I understand that Math does involve many problem solving skills, but the problems take place in a world of absolutes. I have written some rather complex algorithms, but I have not used much Math to do it.
4. Look at society in general. The tenor of the political discussions should tell you how much the majority of the population is interested in deep thought. Answers that take more than 20 seconds to develop are just not in style.
Angleyne: You can't bend that girder - it's unbendable! Bender: Well I don't know anything about lifting, so that ju
Although if they don't have to learn some of the underlying foundations because it's handled automatically then they can focus on higher level programming and putting together building blocks to make new and more powerful systems.
I think of it similar to engineering. Structural engineers don't need to know how to make concrete with the features they require... but they do need to know the different features of different types of concrete and what the limits are.
If the foundations are solid then you can tell them to trust the foundations and concentrate on the building.
Pinky: "What are we going to do tomorrow night Brain?"
Brain: "I would tell you Pinky but this 120 char limi
Do kids today that are interested in soccer not think it's fun because they can't bend it like Beckham the first time they kick the ball? Do people who like woodworking stop because they can't build a perfectly constructed table and chairs, and instead can only build a crappy bird house? I don't think that's really the problem here. Sure there's going to be some kids who are discouraged because they can't program Doom 3 the first time they sit down and code. But those probably aren't the kids who would end up having a career in computers anyway.
Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
Horowitz & Hill?
There's a great lab manual that goes with the classic introduction to Electronics by Horowitz and Hill.
Over a series of lab projects you build a small computer more or less from scratch. The "final" is to program your computer in machine language (motorola 6800) to do something useful.
You more or less learn exactly how a computer works.
After you finish, move to a higher level language like python. You'll appreciate it's sophistication but you'll understand how it all works underneath.
That's what I thought too. In fact, how about Javascript? Nearly every machine will have a web browser, and all you need is a text editor to make a simple Javascript. Although it's quite restrictive it's a good introduction to many key programming concepts.
I was coding 1000 line programs in BASIC at age 8,
Of course no one could have debugged that spaghetti crap...
A valid point. There's also the simple fact that there are other things that "Johnny" could be doing. Why is it a bad thing that Johnny doesn't program, or become a programmer? Why not write a story condemming the fact that there aren't more "shade tree mechanics", or more mechanics in general? That's as big a loss as the other. Right?
"One could imagine as things continue to evolve, that these "low level specialists" could become quite expensive."
Y2K and Cobol, or RPG.
TFA:
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.
The crux of this argument is more interesting than it appears at first.
It is simply not true that BASIC exposes the way the inner computer works. You need assembler for that. The ability to code arithmetic expressions for example is huge. Underneath, you have to manage a lot of resources. The IF/GOTO statement is therefore tremendously more powerful than anything in assembler, because it creates an abstraction which hides the need to manage resources. The FOCAL language available on the PDP-8s was much closer to assembler in this regard: it's IF statement looked like this: "if (VARIABLE) L1 L2 L3", which would branch to L1 if VARIABLE was less than zero, L2 if equal to zero, L3 if greater than zero.
But BASIC -- the kind of primitive BASIC early BASIC languages he means, has a dearth of control structures, and those that are there are very primitive: goto, gosub, if/goto, if/gosub, and ON GOTO.
What makes this interesting is that one basic intellectual skill a programmer needs when handling an advanced task is the ability to transform a problem into a different representation. Thus in paleo-BASIC, with its bronze age era control structures, implementing algorithms forces you to represent the algoritm in terms of more primitive data structures. For example if you want to recursively search a graph, you have to represent the attributes of the nodes in the graph as a collection of arrays, you have to create your own stack in an array, you have to implement the recursion using gosubs and a global stack pointer variable.
However, there is another critical intellectual skill, the habit of which BASIC undermines: the ability to abstract. You must be in the habit of taking your implementations and hiding the details so that sloppy assumptions don't propagate through your code. By way of contrast, LISP is an excellent language to teach abstraction with, because letting your implementation "all hang out" results in an impenetrable thicket of parentheses.
What really discourages both these intellectual habits are RAD environments. The point of the RAD environment is that you are given ready made abstractions that you bolt together. A great deal of the time you can do everything you need to solve a problem by painting the components and throwing in a few simple event handlers. This is a good thing, but it encourages laziness and mediocrity because by making the problem easy to solve, the gap between an adequate solution and a good one is greater.
If you are really interested in fostering coding skills, then start with a language that encourages abstractions, like Python. Then give interesting and challenging problems that will exercise the intellect's "transormation" muscles. The kinds of things kids did back in the day with BASIC won't do the job.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
Python with goto!
All hale the mighty AMIGA!!! I have 3 and can still do more on them then I will ever be able to do on a clone... BTW that is what the machine you are using is... Just a clone...
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.
-- 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.
Baker's Law: Misery no longer loves company. Nowadays it insists on it
http://www.sigsegv.cx/
.NET languages too. I've done quite a bit of C# coding with notepad++ when Visual Studio wasn't readily available (School computers.).
Came with Windows 95, surely would run on newer windows systems?
http://en.wikipedia.org/wiki/Qbasic
What does learning about the underlying system help with in programming?
.NET stable are more mainstream than C/C++/whatever.
.NET runtime and turned into CISC instructions which are sometimes even then converted into RISC instructions... what exactly should I be coding to? How can I know what's happening to my code after it's run through 4 or even 5 levels of automatic conversion?
Architecting beautiful code? Nope.
Learning powerful, high-level abstractions? Nope.
Programming efficiently to the hardware.
With computers getting ever-faster and more advanced, coding efficiently is less and less important than it used to be. Efficient algorithms are still pretty important, but that's more about using matrix calculations and streamlining progam flow than about the intricacies of memory-management and choosing where on the hard disk you place your data for minimum retrieval time.
Witness the rise of interpreted languages like Perl/Ruby/PHP. Look at how semi-compiled bytecode languages like Java and the
Don't get me wrong - I first learned BASIC, then C, then C++ and a bit of assembler, and I wouldn't trade this knowledge for the world. Nevertheless, now when I write C# code which is compiled to MSIL/.NET bytecode, which is then interpreted by the
These days kids are learning how to use high-level tools first, and only learning the lower-level stuff as they get better and better. Sure this means an awful lot of nasty, bloated beginner-level PHP and VB.NET, but by the time they're ready to tackle compiler design they've generally already picked up the important bits as they go.
When we were learning code we'd write crappy code in BASIC/C, and it'd sit on our home PCs and never go anywhere. Now when a kid writes crappy PHP or VB.NET it's generally posted to a forum or used to run their website, so of course it's more visible.
We all wrote crappy code when we were learning, irrespective of the language. Certainly, I know I wrote some BASIC/C code that makes me cringe when I think of it now.
Everything in moderation, including moderation itself
Jesus, what a grumpy and blind-to-everything-new aricle.
Javascript ships with all the major browsers. You can do line-by-line programming just fine for all those simple tasks, and use "alert" as your output. As you need more sphisticated output, you can learn document.write and then move on to manipulating the DOM, thus gaining an easy, early and intuitive understanding of simple object orientation.
Several of the languages he mentions (perl python) also allow perfectly well the line-by-line stuff he complains about, but they're not installed by default on a PC. BASIC closer to the metal? Sure, Basic is simpler to implement than Perl, but these kids aren't implementing languages. And the BASIC interpreter's primitiveness in no way translates to the programmer following what the machine does any better than, say, Javascript does. You assign to variables in both. To a novice it is of no account whatsoever how much exstra occurs behind the curtian when you do that.
sudo ergo sum
Here's the single most important reason why coding skills are on the decline: Being a good programmer doesn't pay. Children learn that money is in having people work for you or in trading, and they're right. The dude who creates amazing algorithms and knows how to code them efficiently is going to make less than his boss who can't tell HTML from C. If you want better coders, there's the problem that needs to be fixed. Or you could trust the market which says that good programming is actually not that rare and good business skills are a lot harder to come by.
Yeah that's cool. :)
I don't give a damn for a man that can only spell a word one way.
Mark Twain
This assumes that coding is what every child needs to do to be an IT professional. This is of course in the "real world" of enterprise IT, a flawed view.
If the kid wants to code then they'll find a way to do it. Personally however, I run into more folks who can't admin an enterprise system for crap but act like they can. Folks with attitude because they code. Woo hoo, good for you. Being a programmer isn't a prereq to being in IT.
Give me a qualified sysop who knows how to deal with performance tweaking, planning, migrations, backups etc...and how to kill off that app when the programmer screws up. ; )
Teach that in our universities.
K.
None of those are line-oriented programming languages. They are block-oriented and some of them are object-oriented programming languages. A line-oriented programming language looks like this:
A block-oriented programming language looks like this:
And an object-oriented one looks something like this:
I realize that there's easier ways to do it with Java than the one shown, but as many in Slashdot have said, the guy who doesn't produce code that makes a computer science professor get an orgams by just reading it is not going to get a job - I'm talking to you, whoever it was that said that using a goto results in automatic rejection of the applicant.
So, anyway: if you were a kid, you might write the two-line Basic script, or even the C one; but would you bother with Java, or would you give up ? And more importantly, since kids mostly learn from other people's code at the beginning: which code is the easiest to reverse engineer ?
Forget magic. Any technology distinguishable from divine power is insufficiently advanced.
Buy them new Lego Mindstorms NXT - with the ease of graphical programming and instant results they may see the results quickly enough not to get discouraged. I think it might be an option.
http://www.alice.org/
Alice is free from Carnegie Mellon University made just for kids.
At Version 3 they are getting help form the people at Electronic Arts to be able to include the Sims characters.
My 14 and 12 year old have had a lot of fun building programs with this.
It has it's limitations but it's a great start.
Not only is it not interesting to them, it's not necessary. When I first started learning computers, you couldn't do anything without doing some programming yourself. Computer magazines came with programs printed in them that we typed in by hand. Who wants to do that today with the Internets?
I would argue, though, that this "problem" isn't even a problem at all. Who cares if most people can't write computer programs? When cars first came out, they came in kits you had to put together and always tinker with. Now most people couldn't describe how an engine or transmission works. But really, who cares?
Only people who are interested in how cars work tinker with them. Only people who are interested in how computers work tinker with them. That's progress in my opinion, not a problem to be solved.
BASIC is a very easy language. Hell, I taught myself BASIC on a Commodore VIC-20 in 1982 at the age of 12. I didn't comment my code because you only had 3,583 bytes of memory to work with on the standard machine...but I learned enough on my own to breeze through a first-year college course using PL/1 while I was still a junior in high school. But that's just me; I also coded uphill both ways in the snow. As for math skills, a few of us in my office had quite a laugh yesterday when we went out to lunch. The kid working the register at the store just shutdown and looked at me with a blank stare when, after ringing up my $5.50 tab, I first handed her a $10 and then offered her another $0.50. She quite literally could not comprehend what to do. When our high school kids can't make change, we've got a problem.
Well, there is always some sort of BASIC available. And it is good, because you can really build your system incrementally and interactively one line a time. Here are all the keystrokes you need. No editors, IDEs or compile cycles!
.field_in_default_window -textvariable a .field_in_default_window .button_under_it -text "Click here" -command {set a "you clicked"} .button
<Launch the BASIC interpreter from menu>
10 a=0 <Enter>
20 a=a+1 <Enter>
30 print a
40 IF a < 10 THEN GOTO 10 <Enter>
<fix errors by retyping the line with its number>
A little different, arguably easier, arguably much more elegant would be to use Tcl:
<Launch Tclsh from menu>
set a 0 <Enter>
while {$a < 10} {incr a; puts $a} <Enter>
And if you want to do windows and graphics, there is NO OTHER WAY to teach modern GUI programming for 10 year old kids except Tk with wish. All other methods are 100 times more complex:
set a "button not clicked"
entry
pack
button
pack
You can of course always use LOGO, but is arguably a "toy" language only, and the graphics is not much easier than tk, really.
Actually teaching Bash is not a bad option. And that, if anything, is very interactive, and very general purpose and real life stuff. And you can do endlessly fun stuff with test, expr and text manipulation tools.
Anssi Porttikivi / app@iki.fi
You can code spaghettic crap in any language. Basic just made it easier which means you were introduced to the reasons *why* you should write plain, procedural modular code at an earlier stage,
Rich
First off, I'm 22, I'm a High School drop-out, though not of my own will. The hand dealt to me was less than fair, anyways. I went to a tech trade school for about 2 months and all their teachers spare one was sorely lacking in knowledge of what they taught. I tried a junior college for a year and found myself hating it.
The reason I hated it was because I had to take tons of other classes that I found tired, boring, and tedious. However, when I look back at it now, two years later, I wish I had followed through. I wish I had gone through, not because of the job opportunities it might afford me, but because I see now how related those "stupid things" are to *everything* else.
An idea that popped into my head is that kids should be taught thoroughly the importance of the connection between what they love and the things they don't really love so much.
Maybe they do this already, but if they did, it certainly wasn't taught to me.
I am deeply considering a return to the college scene, but I wouldn't be returning for a degree. I want to return for my own sense of higher education and nothing more.
at eight in Commodore BASIC, I found the line numbering to be a nuisance because I would invariably mistype a number somewhere at least once due to the tedium. I eventually made myself be more careful as I became more comfortable writing programs, but when I learned Logo in school I lamented how annoying using Commodore BASIC and BASICA was. There may be some conceptual simplicity in the imperative procedural programming style that makes learning to program easier, but I do not think that line-oriented programming languages are especially valuable. Further while various versions of BASIC served me adequately on my personal computers until I was 12, I didn't program in BASIC because it was easy to use, I programmed in BASIC because it was all that I had at home. If I could have programmed in Python then I would have picked that over any BASIC derivative (I even hate reading BASIC derivatives now, even though I have to contend with VBA on a frequent-enough basis when dealing with certain work-people). I also would have loved a Smalltalk implementation, because not only would it have come with a real IDE and debugger, it would probably have come with the source code for any non-primitives that I could have inspected to see how things were implemented. That could have its downsides, though, in terms of complexity. I suppose if there is any substantive barrier to entry it's the separation of the language and API from trivial programming in many popular languages today. You could create a full screen graphics context in a given resolution and color depth trivially, not have to contend with any system event loop, and draw various geometric primitives without tons of boilerplate. While there are libraries that simplify these sort of things, they aren't typically all collected together with a simple language and distributed with every computer into the bedrooms of children. You can't say that there's www.somewebsitethatwillprovideit.com and expect that small children will just find it and decide that they want to program. If it wasn't for an after-school program I wouldn't have even had anywhere near the time necessary to learn Logo in school, so it probably isn't realistic really expect to even just introduce this sort of thing in school and have it stick. Children need to be able to easily program from their own computers in their free time at home, or they'll be waiting until high school to pickup programming in any serious way.
I disagree - turned out alright even after having dabbled in way too much BASIC, FORTRAN and PASCAL :P
In my Java classes, when a resource is freed by a destructor - as opposed to by a close() method or equivalent - it logs a warning. Optionally, the open() method can capture a stack trace - which can help track down the leak, but eats too much memory to do all the time. Along the same line, the Boehm garbage collector for C/C++ has a mode where it can warn you about memory that has not had free() called as it collects it. This is very helpful for debugging manually collected C/C++ programs.
You managed to get David Brin's point terribly, horribly wrong. It's not that BASIC provided a good basis for future programming, but that BASIC awoke a desire to learn more programming. It was good for non-programers to grasp the concepts behind programming.
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
... is that the author has written several novels, his kid is the best thing that has ever happened to mankind and that buying a C64 if you want to run some BASIC is considered 'ingenious'...
Please...
Holy cow, I thought you were joking that CS students weren't taught a "compilers" class, but OMG, I looked at the University of Maryland CS requirements and, yep, the lowest level programming you do is one class of C! No compilers!
Most of it misses the point. As do most of the replys to this article. Many here say, that there is Python, Perl, Ruby. You can even find 1001 flavours of BASIC. So what? What to do with it? When I was young, there were dozends of weekly or monthly journals, which contained game code. Sometimes I took me hours to hack it in. But I had the code. Even more, many magazines explained the code line by line. I was able to change things and see the results immediately. When I had no joystick, I was able to change the game to use keyboard inputs. This was interesting, this was fun. I really doubt I would have invested even half the time I used to hack in those listings, to learn a programming language when all I had where books, which started to explain how to print 'Hello world' on the screen. I think this is the real problem today. There are no materials to interest todays kids. When I go in a bookshop I see dozends of books, which fine if you are an adult who wants or has to learn. When I browse magazines I see game tests, hardware tests, rarely a small project, which is little more interesting than 'Hello world'.
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.
Logo is a line programing language for kids to learn on. And there are a ton of open source implementations. Even ones that run on JAVA or the CLR http://sourceforge.net/search/?type_of_search=soft &words=logo
This is true only when Computer Science doesn't involve software running on computer hardware. When Computer Science does involve software running on computer hardware, only the foolish fail to remember that it is, in fact, all about the plumbing.
It doesn't matter how abstracted the S/W is from the H/W -- at the end of the day there's memory, busses, clocks, devices, (in short: H/W resources) beneath the S/W. Everyone should try to remember that when they code. That is, unless they're writing software that doesn't run on computer hardware. No, you don't need to know everything about low-level arcana, but the more about it you do know, the more informed you will be when you write code. And you'll write better code for real-world purposes.
I wish the Java wonks would remember that.
In the course of every project, it will become necessary to shoot the scientists and begin production.
I think part of the problem is there really isn't a university program that teaches programming per se. CS is heavy on the science and math parts of it and the business programs teach you about databases and other tools that you'd use daily in business. There doesn't seem to be a lot on programming, design, code and project management. You kind of have to pick those up as you go.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
haha that sucks. i 1985 at age 7, I had a TI 99/4a with the extended 32b memory unit. Of course I did manage to write a single program that filled all the memory. That was when i learned to create, and call seperate programs from within one. I still remember it. I had 8-10 games i had created/entered in from samples, and I had a menu Interface to switch games. So i could play for hours, I later added the word processor to it, so i could quickly switch to "doing homework"
i thought once I was found, but it was only a dream.
Probably I am biased, but take a look at Seed7.
Greetings Thomas Mertes
Homepage: http://seed7.sourceforge.net/
Project page: http://sourceforge.net/projects/seed7
Dijkstra was right but limited in his thinking.
:)
It is practically impossible to "TEACH" good programming to a student that teaches themselves basic.
Basic is not that bad for learning programing. It is terrible for teaching programing.
When I was in school back in the days when dirt was a new idea and the SuperPet was the best computer for computer teaching programing. Hey it had an interpreted FORTRAN, Pascal, APL, and I think COBOL. I learned Pascal first followed by Basic, I know some very good programmers that taught themselves basic first and then went on to real programming languages.
You are right in that we don't need basic anymore. Python is just as "easy" as Basic and a lot better thought out.
I don't think the problem is the languages. The problem is expectations. When I was a kid everyone wanted to learn to program to write games. The games of the day where simple and you could wrap your brain around lunar lander, pacman, break out, or space invaders. A 12 year old could imagine themselves creating a new video game. Now the bar has been raised to Doom 3 and Half-Life2.
I doubt that betting your name to print across the screen of flying a space ship in 2d on your monitor has the same thrill.
The same chilling effect has hit model building. Why build a model of a corvette or a P-51 when you can fire up Grand Turismo 4 or FS?
kind of gives me and idea for a new competive programing toy
Now I just need three web cams two model tanks, some sensors, and some blue tooth interfaces.
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
If you're writing a program from scratch it might take a little more to make something interesting than it did 20 years ago, but there are still a lot of easy and fun programming tasks. A great place for a lot of teens to get started would be to download (or install if its provided on media) the development kit for your favorite game such as Oblivion, Neverwinter Nights, Halflife 2 etc. I've been programming since I was about 12 and I still have tons of fun doing simple tasks like scripting quests for my friends Oblivion and Neverwinter Nights adventures.
I remember when Quake first came out. I was pissed off that my brother kept killing me with the grenade launcher, so I silently made and installed a mod that randomly caused the grenade to explode in his face after leaving the launcher on his computer. It provided several minutes of extreme enjoyment as I looked over laughing my ass off at the expression he had on his face as he tried to figure out what just happened to him.
If anything I notice that kids (and adults) lack motivation. I knew when I was 12 years old that if I went and downloaded a C compiler and read some books eventually I could write a game or something else really really cool. It just requires that you persist instead of giving into immidate gradification.
So kids... Go download the Quake or Quake 2 source, get a compiler and get it building. Once you do that go nuts changing stuff around. If you screw it up too bad just unzip the source again and start over. Eventually you'll figure out how to do some cool stuff. There so many webpages, forums, newsgroups and IRC channels you can use as learning resources. I can also tell you specifically that Neverwinter Nights and Oblivion both have great online communities with tons of HOWTOs, script snippets etc. Even if you've never programmed before you can do a lot with these two games by just merging things from different online tutorials and guides.
Grrrrr... don't bother me, I'm thinking.
10 query="BASIC freeware"
20 google $query
30 end
-CZ
PS - I agree with the Salon article. If kids are going to go past
BASIC then in time they'll learn its deficiencies. If they aren't
then BASIC is as good as anything to play with.
I totally disagree with his contention that it's impossible to find
a BASIC interpreter. Heck, he should just write one if he wants it
for his son so badly and can't seem to figure out Google.
I used to agree with the person you're responding to. These days, I tend to take your view - that understanding the guts is IMPORTANT.
... just almost always when compared to:
... because the strings were implicitly shared and thus easy to work with.
Part of what convinced me was seeing the total lack of understanding of the critical difference between heap and stack memory in the C++ programs I was reading. Some people didn't even seem to know you could allocate objects on the stack (java users? It looked like it, but they'd never used Java it turned out) so I'd see code like this:
MyObj * o = new MyObj(...);
o->doSomething();
delete o;
which is not ALWAYS stupid
MyObj().doSomething();
I also had some eye-opening experiences with how a failure to understand the difference between byte strings and unicode strings can lead to amazing code horrors - including images being stored in unicode strings by shoving each byte into a unichar
It's crucial to understand how to understand and design systems at a high level, and it's equally critical to understand how they work internally. The better I understand the lower levels of functionality understanding the systems I use, the better a programmer I become in the higher levels I actually work in day to day.
I'd love to see someone combine these two approaches by starting students on something like Python or maybe some RAD in one unit while hand-coding asm in another, then drilling down and up until the two meet somewhere near C++.
For the rest of us, those "CRUD" software jobs are all that's available. If we want to do real computer-sciency type stuff, we need to take a "CRUD" job and hope we can get the other folks there to do computer sciency type stuff as part of their process. That's like herding cats.
There are *very* few *real* computer-sciency type jobs out there. Unless you have a PhD and at least 10 years of experience doing computer-sciency type stuff, of course. Oh, and you can't get 10 years of experience doing computer-sciency type stuff without 10 years of experience doing computer-sciency type stuff.
I'd love to work on real computer sciency type stuff. I'd love to architect compilers or natural language processors. I'd love to build the next gen OS from the ground up. But I live in the real world and have bills and dependents.
"Times have not become more violent. They have just become more televised."
-Marilyn Manson
Sorry, but you are totally wrong here. And what's funny about it is the way to break them of the bad habits brought about by early exposure to BASIC is a methodology that comes from Dijkstra himself.
After letting me learn BASIC, and play with it thru most of my first class in it, my Dad sat me down and introduced me to the 5 structure diagrams. And I have been using structured code ever since. (Note to others, Go TO less programming and Structured coding are not the same thing. Depending on the language, you may have to use GOTOs to simulate portions of the structure diagrams.)
It all depends on the college folks. I went to a liberal arts college for my CS degree and made a point of taking electronics. From that I've worked in various languages, covered Church and Turings work, assembeled electronics, programmed them in assembly, controlled them via serial port, written a compiler, and done all the other great stuff that puts the science in computer science. Just pay attention to what college the whippersnappers go to and what their program offers and you'll be fine.
...the Laity knew their place. We don't have a peoples language anymore - just specialist OO/B&D obscenities like J2EE and .net.
Kids today would do better with an Apple II or TRS-80 to get their minds around computers.
If it were done when 'tis done, then t'were well it were done quickly... MacBeth
I have been wondering about these issues as well - I am not so concerned by the lack of BASIC per se (although I learned to program on an Apple
Fast forward a few years, and I am a theoretical cosmologist, supervising PhD students and teaching Mathematical Methods to grad students. I have noticed that comparatively few of the students who walk into my office to ask about projects are proficient in *any* low level programming language (i.e. C/C++ or Fortran 77/90 -- all of which are widely used in my line of work), but they will often turn in their problem sets as a Mathematica notebook. However, in order to get my work done I need to do some fairly heavy duty simulations, and these run in Fortran or C/C++. The tools the students do know, such as Mathematica, are fine for simple things and prototyping but they are just too slow for "production" use, and there is a big learning curve for students who have not *any* programming before to get to the point where they can understand and extend code written in one of these languages.
These students (all very smart -- juniors and seniors, and beginning grad students) are often extremely computer literatate -- they just have little idea of what goes on under the hood. Whereas back in the day of the Apple ][, under the hood was pretty much all there was. In my teaching I try to present problems where I know that Mathematica will choke, to force my students to think more carefully about the tools they are using. (This is primarily to improve their analytical skills -- computer algebra is great for doing away with drudgery, and it has largely supplanted integral tables -- until the day you meet a problem Mathematica can't evaluate, in which case you are in deep trouble since you haven't developed the skills that might let you tackle it on its own).
Perhaps computers should all ship with Apple ][ or Atari emulators?
I was feeling similarily until I discovered IRB (Interactive Ruby).
If you want to talk about amazing incentive for getting children to program, look no further than Lego. I remember loving Lego Bricks as a child when all they did was fit together. Now you can learn to make actual working robots from them, using a programming language which was designed for children!
Is less of the intellectual realestate being dedicated solely to programming? Probably.
But this may have nothing to do with line programming (or lack thereof) on personal pc's today.
I'm "the computer geek" research assistant at a neurology lab. Though I have more expansive knowledge of computers themselves, not a single researcher in my lab can't knock out a quick and dirty script. Many of them have written entire suites of tools to accomplish the tasks they require in languages as varied as bash, perl, C, C++, java, tcl, gtk, Obj-C, etc.
I'd ask when you were hacking away at line programming, was there a significant number of young kids doing [url=http://www.deviantart.com/[/url] with their computers? No, because the capability didn't even exist.
The fact is, there may be less "programmers" per se. But programming [i]isn't that hard[/i]. In fact, just about any language is easy enough for anyone with intelligence to pick it up with little effort if the need arises. We may be seeing less folks dedicate their learning, hobbies, etc. exclusively to programming....but that simply isn't necessary anymore. Programming is becoming an aside, a secondary skill to the more primary skills of medicine, research, mathematics, biology, physics, art, and design.
And you know? I have a feeling that's probably the way it should be.
"The same chilling effect has hit model building. Why build a model of a corvette or a P-51 when you can fire up Grand Turismo 4 or FS?"
When I was in high school and the military I spent a lot of time doing amateur work on models for Doom, Quake, and Need For Speed. I remember making my first NFS2 car model. I think the high poly count model had 600 polygons, and that was well above the other cars, the low poly count model had like 40 or less polygons.
Last week I went to a seminar where the project lead from Prey (Human Head game studio) talked about the development of Prey. The LOD models in Prey were upwards of 7000 polygons, the HOD models were 20,000. Not that the 20k models where used in game, they were used to create textures, bump mapping, and other effects at design time for the LOD models.
But still, I can't imagine the tools or work that are required to make a 7,000 poly model, let alone a 20,000 poly model while looking back at my 600 poly model.
-Rick
"Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
I think all children should be taught to use the VMS OS and AS/400 OS. For those who don't quit from frustration in the first five minutes when they switch to DOS and Linux, those shells will seem intuitive in comparison.
"You'll get nothing, and you'll like it!"
BASIC is standard in graphical calculators from TI and Casio.
I coded pong in my Casio in fact.
It may not be the problem, but it's still certainly one. I see people posting on forums all the time who want to make a MySpace clone or code an MMORPG but have ... well, no coding experience. They claim to be "willing to learn" but when you start going on about starting small and learning the basics they get flustered and either tell you off or lose interest.
... people don't see 1,000 lines of PHP and SQL queries, they see a couple hundred lines of HTML and think "Well, how hard could that be?" They don't see shader models and memory management, they see some cool explosins and thing "Screw 'Hello World,' I want to do that!"
There's something with computers/softare
Who doesn't like free music?
I've had this discussion with a Noted Industry Guru, and his reaction was just get them started on the dominant pro language as soon as you can - simpler programming environments just delay the inevitable. But then again he and I and many of us all learned BASIC on a PDP-11 - so our programming schooling was based on a gentle intro that made us brave enough to then dip into assembler, Pascal, etc... Then you have the problem of teaching to the AP, which was built around Pascal for a long time, then C++ for a couple of years, and now Java, so it's been a moving target.
For a few years, I did every "need it now" thing for our school in HyperCard - it was fast, made sense, drove you in the direction of higher level languages (or at least made you think reasonably hard early about the structure of the data and the nature of the challenge). It also got a lot of kids interested in "real" programming and willing to spend the time to get something meaningful and immediately useful out of some increasingly challenging code.
I love Mindstorms for getting kids to be techy, but I wish it was still driven by LOGO as the first TC sets were. My undergrad and grad students were always required to do a LOGO project, and they rolled their eyes at the beginning, and were pumping their fists in the air in victory when they saw the results on the screen. In contrast, they were all convinced Making Web Pages was going to be the bomb, and they were ready to throw their hands up after the first few iterations with coding HTML. Some of that is inherent - a inadvertent change in LOGO still makes something that makes you think more and harder, the same sort of "goof" in HTML makes an unholy mess.
Our kids love Stagecast, but it's still not what it was intended to be - IIRC when it was "Cocoa" at Apple, the intention was to be able to see the source code, which was Java, behind the cool things you were building. And the GUI "actors" largely mirrored the OOP behavior (data, methods, classes, inheritance, etc.) of the underlying language. That would have been very cool, but that last bit of linking the elements to their underlying code just never got implemented in the commercial product.
And of course the math skills have to parallel the CS skills. I've seen kids in middle and high school simply shut off their algebra and stats skills when presented with a programming challenge, and vice versa. They've not been shown that there is significant resonance between them. Graphing calculators provide something of a bridge there, but there's no parallel system on a computer that can reinforce theta behavior.
On the other hand, I sat in a presentation at the (then, spring 1990) Soviet school in Sofia, with the science and math teachers were going thru their respective curricula like a four hand piece for piano, matched virtually unit for unit. My boss and I sat there with our jaws on the floor. I jokingly said we should just surrender now. Touring their computer classes, though we could not speak each other's languages, I was able to communicate with then in a very cool fashion by way of a dueling-banjos exchange using hires graphics in BASIC to do some math-based graphics routines on their Pravetz Apple II clones. They 'got' the connection between the math and cs and art they could do with these systems, and could use it as comfortably as a spoken language.
With things being as labile as they are, I'd rather have a brave and encouraged student, with some programming skills expanded progressively, willing to go the next step, than start a kid with a course in C++ or Java that could flatten them without the preparation we all enjoyed and which could make them adaptable to what comes next. It's probably fair to say the language they'll get paid to use hasn't been invented yet.
"Win treats sysadmins better than users. Mac treats users better than sysadmins. Linux treats everyone like sysadmins."
Certainly when I was younger - my BASIC programs were neither stunning (even compared to the games of the day), nor particularly well written. They did, however leave a certain "I made that" feeling - which is what pushed me onwards to make bigger, better programs.
As a non-programmer today, I would say that learning BASIC definately helped my abilities in being a "power user". When I was a clerk, my bosses truly appreciated my understanding of Macros and scripting that came out of my BASIC experiments as a child. When "can you take these spreadsheets and generate this monthly summary?" turned to "if you give me a little extra time, I'll make a button that will do that automatically, so it will take 30 seconds to produce each subsequent summary", they were pleased with the results - and often gave me a raise.
Sounds like a Microsoft problem. Linux systems have incredibly easy access to programming languages.
Maybe there are too many to choose from and it's daunting to start: Obviously C is probably not what Johnny is looking for at age 8.
Every Windows system ships with VBScript and JScript, both of which are easier to code and more powerful than the earlier Basics when used in command-line mode. The problem is not the lack of an easy and accessible line-oriented language—it's the confused and crappy-to-nonexistent documentation for these scripting languages and wsh. It doesn't help that MS seems to want to keep them a secret.
This shortfall extends to every beginning Windows book I've seen. It seems that even the cheerleaders are unaware of these resources.
I'm a Programmer. That's one level above Software Engineer and one level below Engineer.
You're missing the ^G to make it beep after every line.
Amateur.
If it's for-profit but free, you're not the customer -- you're the product (e.g., the Slashdot Beta's "audience").
I get a lot of job applicants at my company for Java programming positions. They have CS degrees. Some have masters. They can talk for hours about MVC and Hibernate and rattle off IDEs and frameworks they use.
Around 90% of them (yes, NINETY PERCENT) cannot write a simple rescursive function. Around 80% have trouble writing a for loop.
It's like night and day when you give them the problem. Some bang out the recursive function in 30 seconds, and they do equally well with a for loop. (Often the recursive function comes faster because the task lends itself to recursion.) But that's the 10% that we get interested in. The rest get the door. And it's demoralizing, because we've just talked for 30 minutes and been impressed by their buzzword command and talk of past experience.
It's notably awful watching the masters degree holders fail in the same way.
CS is not making programmers. I'm not sure it ever did. Maybe programmers have always made themselves. But clearly the crop of students I'm seeing now are not programmers. They are not interested or capable of understanding algorythms and lines of code. They assemble parts. I think of them more as web designers, but a level deeper in the guts.
I've found myself wondering out loud if CS has become the same sort of catch-all "I don't know what I want to do so I'll do this" as law school. We've all seen people go to law school after college because they don't know what to do. They finish, and then drop out of lawyering quickly to go into some job which works better for them, given that they can no longer put off the job market by schooling.
A further worry is that CS is now the law school for second-tier people. Good in English or History? Go to law school. Not good with anything? Get a masters in CS. But then, for most, that decision is coming in late high school/early college, rather than after college/before the job market, as most CS folk I see have CS undergraduate degrees (sometimes accompanied by a masters).
If programmers always educate themselves, then maybe we have roughly the same number of good programmers coming from CS departments now as we did in 1980, just along with a huge bunch of also-rans, now.
If you look at all programmer job applicants, maybe you'd find the same competance in a fixed NUMBER of applicants as in 1980, but that only the percentage of bad programmers has increased, as more people go through CS.
I'm not seeing the difficulty here.
Of course, for Perl and Python addicts, this will seem absolutely heretical, but what's the big daggone deal?
I have a CS degree and couple years experience and I wouldn't even know where to start to code myself out of a paper bag! :)
So that explains why most the people I interviewed the various times we've tried to hire people had no clue about assembly language or what a compiler actually did to make the code run. Hint: I work at a company, so your statement doesn't hold for all companies. Oh, and we have to deal with the crap code that these folks end up writing when these other companies come to us as customers and 3rd parties. *bangs head on desk*
Just because many companies don't care if you demonstrate knowledge of the low level details, it doesn't mean it doesn't matter. Some companies actually look for this. Other companies will benefit from this, even if they didn't know to ask.
--JoeProgram Intellivision!
Good programming is an art just like watercolor or oil painting. While it is possible to learn the art some are born with the internal ability to throw around lines of code like paint onto a canvas. Though the result may possibly seem absract to the unknowing, it's really a beautiful piece of work.
Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. ~Albert Einstein
Sometimes kids SHOULD give up. At some point you must realize that you just can't do it. Learning to accept defeat is just a part of growing up. It is about learning your limits. Just look at the kids that started programing Duke Nukem 3D or Vista.
Don't fight for your country, if your country does not fight for you.
I've only played with it a bit, but it seems like it could be an ideal learning environment -- the kind of thing that feels like you're playing but are actually learning something.
-- It only takes 20 minutes for a liberal to become a conservative thanks to our new outpatient surgical procedure!
So what if Johnny can't code? Does everyone really need to be able to code? What if the article lamented the inability of the Johnny to fix the family car. Who cares? Coding is a specialty -- not one of the three 'R's. That Johnny can't code is not a concern. Tell Johnny to go outside and play.
The problem is not a dearth of math education--MOST high schools offer classes like AP Calculus--but low standards for entry into colleges. Furthermore, with AP Calculus, the test itself is often taught at the cost of actually teaching the concepts. This is done so "bad math students" who are otherwise intelligent can still take that all-important AP class to solidify their class rank. Just ask any student who has recently gone through AP calc at a traditional public school.
Despite being only 21, I still got to cut my programming teeth on BASIC in middle school and VB, Java, HTML and JavaScript in high school. Neither langauges that are highly admired, but I had fun taking the classes. (My school also offered C++, PASCAL and Flash.) I have no intention, however, of being a programmer; I'm not that kind of geek!
I'd personally call Python easier to learn than BASIC. But there's not a whole lot of motivation. I mean, the first thing most people programmed was games. Um..... How long would it take you to make a competitive game then, and how long would it take you now? I mean, NetHack, Moria, Adventure.... These games all could be approached on a graphic level within a few weeks of learning to code. Take a look at a modern game recently? How accessible are the libraries to make a game like it? How easy is it to replicate?
My little site.
I entered into a computer engineering program to learn how to make games... But I DO know how much is required and I am interested in solving new and inovative problems. Does that mean I win?
"Infecting minds with my own memetic virus, one post at a time." Ultimape
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
-- prof.dr.Edsger W.Dijkstra
Dijkstra was a great computer scientist, but I doubt he was a better programmer than Linus. And Linus' first language was what? Yup, that's right. His computing path was BASIC -> ASM -> C, where he has stayed since.
I started with BASIC. I bet most Slashdotters did as well, maybe even you. So enough with the hyperbole already.
I've read lots of responses to the article, and find lots of interesting (and mostly well-thought-out) thoughts/opinions. Many aspects of truth are revealed in the posters' responses - but I must say that the "kids these days do xxx wrong" thing is over-rated. I think it is far more important to have the attitude of "what can be done to mentor/help the next generation of software professionals."
In my very humble opinion, it seems like (not enough) good solving-thinking is going on, in combination with the fact that computers are generally viewed as a commodity (from the viewpoint of folks my kids' age). Solving problems with programming languages/environs is very much like the creative process for making music: An understanding of structures and critical key concepts is absolutely imperative. Whether the understanding comes in an innate way or is learned from mentors/teachers/peers, structure and conceptual strength are paramount.
My kids see our computers as simple commodity things (like a phone or an iPod) - not as fascinating worlds to explore. Getting a young person to seek and find the wonders inside how computers work is not necessarily built in. As always, inspiration is something that cannot be taught or given - only experienced.
A Passionate Independent Musician
I'll never be able to write Doom 3's equivalent alone, at least not within a reasonable period. A kid might eventually be able to equal or at least approach Beckham's success; it's possible, and people do it--alone.
The first difference is hope.
The second difference is competition. A kid's interested in soccer especially when he can beat all his friends. Doom 3 is a game with singular complexity; implementing it is one task with one difficulty. Playing soccer is as difficult as your opponents, so you can improve by playing people as good as you or better, or massage your ego by picking easy fights.
And the thing is, the fun is when you beat someone slightly better than yourself. If you see Doom 3, you won't be satisfied soon with your games until you write something in three dimensions with decent shadows and textures; but if you're playing soccer, you can find decent opponents for your skill level.
Once you've decided to start programming, then writing a Space Invaders clone can make you positively joyful. But ask a person on the street whether they'd like to do so, and you get a lukewarm response at best.
Because Johnny is an idiot:
* Johnny is the one at your company that has been working there for 10 years
* No one fires him becuase he "knows a lot of things about the process"
* Johnny talks about his technological exploits
* Eveyone else has to debug and fix Johnny's bugs
* He never asks the other developers any question on how to do something, for fear he will look inferior (too late Johhny!)
* AND WHEN YOU NEED A FREAKING IP ADDRESS FROM HIS PC???
You: "Johnny, can you get me your IP Address?"
Johnny fumbles around his desktop, going through all the Control Panel Options
You: "'ipconfig' Johnny"
Johnny: "EYE PEE CONFIG?"
You: "Yes, you know, the command prompt?"
Johnny: "What?"
You: "Never mind... what the status on your code module?"
Johnny: "Module??"
You: *head explodes*
But I DO know how much is required and I am interested in solving new and inovative problems. Does that mean I win?
:-) Then they give you honorary doctorates and stuff...... :-D
You win if you can then translate those skills into an effective job, succeed beyond your wildest expectations and then as an alum, give money back to your alma mater.
Visit Jonesblog and say hello.
I remember having sample code for small programs in both the manuals of my C64 and C128D. That's where you could get started. Actually most of the manual was about how to program your computer. That's where I got hooked. I found the computer under the christmas tree und read the manual. It was rather technical, but fascinating nonetheless.
Then there have been many magazines that had sample programs in it. And I don't mean special programmers' magazines, but normal mainstream magazines for the C64. It was amazing and I miss it very much.
I don't mean high level software projects like: Understanding OpenOffice.org sourcecode in 24 hours/years, but small, simple fun stuff.
Most modern implementations of BASIC (by "modern", read "anything after about 1982" - certainly BBC Basic from 1982 did ;) have implemented some form of support for procedures, FOR loops and WHILE loops.
Thing is, when Dijkstra wrote his paper, that wasn't the case. Indeed, I don't think support for any of these constructs was ever standardised, so anything which depends heavily on them is likely to be limited to one dialect.
When I was 8, the only code that I knew was load "*",8,1
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.
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...
It's official. Most of you are morons.
Bingo. I am an olde tyme computer fart, the kind that started in BASIC back in the day. In business, they taught us COBOL and various add-on packages like FOCUS.
I noticed the rise of object-based code when I was very young, and unlike most, I said "What the HELL is this crap? Are they trying to get rid of normal humans in the coding business?" and like statements.
Unlike most who jumped in and swam with the OO fishes, I declined the honor. Explanations, in my ignorance:
OO code was developed by people who think in calculus and set theory. It seems natural to them.
Most people don't know calculus and never will. The opinions of math majors are immaterial; people don't need calculus, matrix algebra, set theory, information theory, all that you need to even begin to write good code in OO languages.
Math major are usually geniuses, or have aberational mental processes that let them focus on a problem for days or weeks at a time. I know, I'm one of those people. But most people aren't geniuses, don't care to work on code for days, and don't know why anyone would want to. But OO is designed by those people for those people. It's like a lodge of math geeks.
This reliance on mathematical geniuses to use languages created by mathematical geniuses lead to some nice job security. But it doesn't help the actualy world, because the world needs code that is simple to write, debug, and maintain. OO is NONE of those things, and yes, I do know about spaghetti code in BASIC and the simple reusability etc. of OO code. But resuability and such can be done in non-OO languages as well; it just takes discipline.
We are moving into a world where absolutely everything is dependent on code, and the code is incomprehensible to people who haven't had four or five years of solid math training, then years of CS instruction. This is intolerable because there aren't enough such people in the world. People usually don't want to spend a decade of their lives reading books and drinking Jolt just to write a banking app.
The usual counter argument is "Fuck you, learn math and CS, the past is over, etc.". But I've been both in and out of CS and I have to say that fundamental problems in the real world are not being solved because of the bottleneck caused by the mountain placed in the way of coding for apps needed on the fly. David Brin is right: students and businesses are now consumers of code, not producers.
Perl is good, Ruby is good, these are things that alleviate the problem a lot. But even now, they are OO-ing Perl and making the CS profs happy -- and it's becoming yet another incomprehensible language with a steep learning curve.
Um, let me make a simpler argument, the same one I'm responding to, and it's a damned good one. Look at the VERBIAGE on those "modern" programs. What the HELL are you people thinking? Just typing all that slows down development enormously.
I guess the next thing to do (if I'm so clever) would be to develop a simple, usable language for non-CS students. I kinda think someone did it already, many times. But no students will ever see it.
CS professors and coders are logjamming development of simpler solutions, because they are fundamentally conservative, deeply so. They have invested most of their lives in learning Rube Goldbergian code architecture and aren't going to change.
I'll just continue to watch the meltdown.
I am working on an MS in computer science. It seems that in my program, there is a noticable percentage of young students who can barely write code. ("Perl? What's that?") These students often go into computer security or some area such as networks where, supposedly programming is not required.
Having done most of my coursework, I have found that I have had a tremendous advantage in being able to program, whereas I have seen students who cannot run into problems. If nothing else, I am better at dividing and conquering, since writing and maintaining moderately complex, good code requires a way of thinking.
Maybe the University just wants a broader student ba$e.
Here is an idea. The languages that people use to produce many applications, like Java and Visual Basic, are not the best languages for learning programming.
He could have just downloaded a C64 emulator. They don't cost anything. It isn't even too big to download, IIRC.
That said, it's not *quite* the same as everybody "just knowing" that a BASIC is on their system.
This is David Brtin.
Master's in Applied Physics, 1973. Doctorate in Philosophy, 1981. Hugo and Nebula award winner. Author of The Postman.
While trawling through eBay, one day, (my son) came across listings for archaic 1980s-era computers like the Apple II. "Say, Dad, didn't you write your first novel on one of those?" he asked.
"Actually, my second. 'Startide Rising.' On an Apple II with Integer Basic and a serial number in five digits. It got stolen, pity. But my first novel, 'Sundiver,' was written on this clever device called a typewrit --"
I feel as though I advocate Game Maker (gamemaker.nl) to at least 1 new person every day.
LWATCDR is quite thoroughly correct: "I don't think the problem is the languages. The problem is expectations. When I was a kid everyone wanted to learn to program to write games. "
The only problem these days is that it's really quite a daunting task just to put animated pictures up on the screen and move them around. In fact, I (who like many here has been programming since the age of 8) found myself losing interest in programming early in college as the dreary tasks like "make Scrabble as a Java Applett!" began to erode the fun I'd once had making text adventures in GW-BASIC.
I can only imagine that I'm not alone in dreading the amount of "stuff" that goes into what often seems like a simple little game idea (and just to get it to show up on the screen!). I think that's why there are so many Flash games out there--it's a way to get at the graphical side much more quickly. But anyways, my interest in programming was fully restored by this Game Maker software for precisely the right reasons; it's object-oriented, but it sets up the objects for me in a nice point and click interface, there's no "windowing freakin' toolkit," the built-in language provides all the functionality I'd need to make simple 2D and 3D games without requiring me to know all the under-the-hood stuff that practically every other package requires in order to trick the game into working with my hardware. I think things like that are going to be absolutely crucial in the effort to encourage folks to learn programming, and to further the whole homebrew games scene.
I would just posture a guess (and it's just a guess), that it's moreso because computers can do so damn much these days. I got a Commodore 64 when I was 9 years old or so (it was used and a bit outdated at the time, but it was still a computer; something I desperately wanted). The thing was, you couldn't do much but play a few simple games and program on something like that. Even when I got my first PC (a 486SX 20mhz, 2mb RAM, 80MB hard drive) yeah it had Windows - but besides typing a paper for school (which I still used WP 5.1 for DOS for), it still didn't do much, and I ended up playing around in QBASIC a lot. Despite hating when someone says these days when someone rails against GUI's, back then I really did just hang out in DOS rather than loading Windows. Eventually all that programming paid off; I went to college and cot a CS degree.
:D. I don't see this as necessarily a bad thing, just an observation.
These days though, when a kid gets a computer, he also gets internet access, iTunes, online games, and all sorts of other goodies. The boredom required to play around w/ a compiler never sets in
"People who think they know everything are very annoying to those of us who do."-Mark Twain
BASIC stands for 'Beginners All-Purpose Symbolic Instruction Code'. It was developed at a university by a proffessor and his students with the main goal being to create a very simple and easy to learn programming language. Its widespread adoption and countless remakes were a direct side-effect of its success in this venture.
admittedly, it had a number of problems and deficencies, chiefly:
a) it was too simple and couldnt adapt to new methodologies and best practice standards (structured programming, dont use GOTOs,etc.)
b) the language had no central standard and was constantly recreated, resulting in a lot of versions of BASIC with extraneous, distracting features or designed to do types of programming that BASIC should never have been used to do (pretty much everything other than whats at the back of a math textbook)
admittedly BASIC is obsolete and there are a range of better choices available as a first language (Pascal,LOGO), and the author exaggerates greatly its absence (I dont see why a mac/win BASIC interpreter was insufficent for what he and his son were trying to accomplish, or why you have to code in simple line by line instructions for getting a feel for how the computer executes an algorithm, particuraly as I believe myself to understand this quite well, and never learned BASIC) but it is very unfair to say BASIC is a horrible learning language.
As a parent, I was thinking pretty much the same thing that the author did, and have come to the conclusion that Ruby is the way to go; it's fully object-oriented, but doesn't impose such rigorous requirements like Java, it's easy (really really easy), comes built in on my OSX machine, and with irb (the interactive ruby interpreter), I can show my daughters the results in real time. When the program gets bigger than 10 lines, we switch to an editor and write the programs out that way. Simple and straightforward, but with limitless possibilties.
I looked into Squeak, which is Smalltalk with a kid-friendly feel, but it felt to me (and to them) like being thrown into a candy store and told to take anything and everything; they spent too much time clicking on things just to see what they did or what happened next and didn't get anything done.
Ultimately I want my kids to understand what's going on behind the curtain, and getting them to understand how "programming" works in general is a good way to go. But more than just showing them that you can write a program to print a Fibernacci sequence is to get them to understand that a computer can do *anything* if you tell it to if you spend the time to figure it out.
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
My turnips listen for the soft cry of your love
I wish I had known this eight years ago when I was looking for a college to attend. That's an impressive list of names! At least now I know where to start looking when I feel like going back to school.
Love sees no species.
There are many fine languages and tools which can be used, the problem is the level of setup and understanding some of these tools require.
Java is nice, but it's still a toy. It requires understanding class libraries, setting up a classpath, and other trivial/non-trivial things. It was meant for beginers, but does a rather poor job of helping the newbie (ie: enforcing certain conventions, file naming, CLASSPATH etc).
C/C++ are a little bit better, but there is still that pesky #include bussiness.
Perl suffers from the same problem.
BASIC was / is nice, because it's a totally self contained language. ROM basic was totally self contained. No Linking errors, dependencies, CLASSPATHS, just type and go.
Even BASICA and GW-BASIC were as simple as possible. A single file / command and your "development environment" was all setup.
Modern programming languages today are nothing but cruft. Full of worthless "content" useless poorly documented libraries (I'm talking to you Sun, Java enthusiasts), and non-standard bullshit (looking at you, MSFT, C#,J#).
Best to start with the BASIC(s), something that just plain works (TM).
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!
"Linux is for noobs"-The new MS fud strategy
This is the typical article done by someone who grew up in the Microsoft vaccuum. Of course there's a shortage of good programming tools... if all you've ever seen is Visual Basic and .Net. Try stepping out of the little box that Windows puts you in and you'll discover whole new worlds of programming. Try Python or Ruby - they are just as easy to pick up as Basic was, and my kids are proof.
Those classes have been replaced by Java, where you don't even worry about resource leaks. Hey, garbage collector takes care of it!
Bingo... java will be the death of CS programs everywhere. It is such an unbelievable load of crap it makes me want to puke.
Interestingly, a large number of students it seems coming into CS programs at the undergraduate level want to program games, but have no idea how much math and algorithm development goes on when one is crafting new material.
... wait, why is that interesting again?
Interesting: people are going to school for things they don't already know, requiring their professors to teach them things that are part of their curriculum.
StoneCypher is Full of BS
... in the USA bother to learn to program? When Johnny grows up and wants a program, he can just hire a Viruru in India to do it for less than he pays Juan at Taco Bell to make his lunch.
Coding of all kinds is hard and requires discipline. It always will. So it will always be restricted to people who have both the aptitude and the initiative. Even someone who wouldn't really categorize themselves a programmer (say a web designer or report designer) will still only be slightly more numerous because the nature of the job requires certain analytical skills and discipline.
The overall lack of skilled programmers really has nothing to do with the language or a particular choice of programming paradigm - whether COBOL/BASIC/FORTRAN or something more OO or something more exotic or something less readable. Those technologies tend to be matched to problems by being the best tool for solving a particular problem in the best way.
There can always be a debate about whether it's the right way to teach it, and some people may or may not get exposed to it who could do it, but we don't lament it and make everyone take a top-notch cooking class even though some potentially great chefs may be exposed to terrible cooking teaching as a child and thus be lost to gastronomic history.
The problems programmers need to solve are programming ones, not try to subvert society to produce more programmers.
The point is that kids arwn't learning any programming language. Nor are their parents.
You could have fun programming in BASIC and interesting stuff could be found in the books and magazines available in every drugstore. No one knew or cared if they heading onto a career track.
The syntax of peeks and pokes always annoyed me, but you're wrong.
This stuff rears it's head over and over, and if people knew it, they'd work faster and smarter and without bothering ME.
Example from last week: Read a binary file, byte by byte, and you need to know about big-endian/little endian differences. A little playing with peek and poke would have trained 'em and I could have spent more time on something else.
Computer people should know how computers work. Using the old analogy about how you don't need to know how the car works to drive one: We're not drivers, here, we're mechanics/designers. We should know how the car works. Would you want your children driving cars designed by people who didn't know how they worked? I know, I know, it's all little black boxes, and we can design a car the same way -- only the sports model will have to be the size of a Winnebago to hold all that abstraction -- kind of like software, today.
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. -- prof.dr.Edsger W.Dijkstra
Countless people got their programming start on a Vic-20/C64/C128 in BASIC, and a great many of them went on to learn to program well. If this guy thinks it's practically impossible to teach them good programming, it's because he's a spectacularly bad teacher. His statement sounds like typical elitism-based jackassery.
That's my rather annihilating verdict on today's youth. If you WANT to create code, it's still possible, and maybe more possible than ever, given that today you have a lot of different and very interesting languages available to you. Yes, they don't come with your computer (unless you're using Linux, which almost invariably has a set of languages bunched with the Distro), but there's lots available online. For free. And on top of it, you get a ton of very sophisticated libraries too that take away a lot of hassle.
But why bother? Anything you might want is available already. And better than you could do it. We used to write "simple" games like hangman or (later) space invaders, and it was cool 'cause first of all, those games were popular back then and you could actually BUY them. But hey, I could code them and give them to you FOR FREE (which was something back then, without internet and P2P).
Why bother coding today? Anything you could come up with is invariably inferior to anything you could download.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
While I will probably get flamed for mentioning it, JavaScript interpreters do come with all major operating systems that include web browsers. It seems a natural progression for a kid who is doing a web page for his/her favorite band to decide 'Hey, I want to ask a user some information and use that on my webpage'. This is to say they don't have access to PHP or ASP or any of the 'web' languages in the first place. In addition to that, a lot of games provide rich APIs. Just last night I was marvelling at how extensive of an API World of Warcraft has. These methods aren't exactly as simple as lauching your favorite MSDOS editor and typing away, but there are a variety of options for any aspiring programmer to learn the art or at least dip their toes in the water.
Bingo!
PS: I passed on my moderator points to post this!
NO. No, no, no and no!
I started with BASIC. You have no idea how hard it was for me to grasp the idea of C. When you're set into thinking of a program as a really long thread of lines with the occasional gosub that does little more than "menial tasks", when you're accustomed to global variables and other nonsense that is taught to you through true BASIC, then your step to sophisticated languages is a very far leap.
Don't poison your kids' minds with BASIC. It's bad for them.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
I think what he means is that people join classes and don't even have the basic underlying principles right to be TAUGHT. When someone wants to be taught the principles of computer graphics, I don't want to start with explaining how trignometry and matrix calculations work. I want to presume that they bring this kind of "basic math" with them when they come and sit down to hear how to apply that knowledge to computer graphics.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
Using the CScript interpreter (comes with windows):
while(true) WScript.echo("Big Tits");
Which is technically one line of code, even though it contains five different fundamentals of the language (looping, boolean values, Object indirection, function calls, string values).
If the question is "Why are there no line languages", then the question is fallacious. They're all line languages. Some of them have non-line editors, but they're all line languages.
I like CScript for this purpose for a couple of reasons:
--It's insanely powerful, so far as Javascript goes.
--The separation of abilities by objects (fso, WScript, etc) makes it easy to poke around to see what you can do in a particular --javascript environment, so you end up with a tigher curve when moving to, say, ActiveScript.
--It's complex enough to be useful, but simple enough to learn in your spare time (much like PHP, but without the extra download).
--With a good instructor, it's an excellent primer in object oriented programming.
--It doesn't teach bad habits like BASIC did (ie: GOTO and spaghetti code)
--You can't break your computer with it (remember all the shit you could do with Peek and Poke? I lost a system disk that way.)
--Ok, well, you can, but it's a pain in the butt (using FSO and WScript.Shell...)
110100 1101000 1101000 1100110 0 1101111 1101000 1100011 1
Math major are usually geniuses, or have aberational mental processes that let them focus on a problem for days or weeks at a time.
Maths faculty everywhere wish that were the case.
I miss Commodore.
Occam's razor is the blind faith in the natural selection of least resistance and in universal oversimplification. -- EF
You're trolling, but I'm bored, so I'll respond anyway.
OO code was developed by people who think in calculus and set theory.
Not so. The people who think in calculus and set theory developed Haskell. And if you were arguing against Haskell, you might have had a point.
Perl is good, Ruby is good, these are things that alleviate the problem a lot.
Perl was designed for writing short, simple programs which do lots of string manipulation. For that it's often the best thing out there. For anything large and complicated, it often becomes difficult to maintain.
Ruby is as object-oriented as they come, and very clean (but slow) as a result. In fact, it's directly based on the grand-daddy of object-oriented programming, Smalltalk.
Um, let me make a simpler argument, the same one I'm responding to, and it's a damned good one. Look at the VERBIAGE on those "modern" programs. What the HELL are you people thinking? Just typing all that slows down development enormously.
That would, in fact, be Java. Also Objective-C. Occasionally C++, but not so much. Pretty much everything else out there has shorter lines.
I guess the next thing to do (if I'm so clever) would be to develop a simple, usable language for non-CS students. I kinda think someone did it already, many times. But no students will ever see it.
Hah, like AppleScript? Really, I think a better thing to do would be to teach a Smalltalk-derived OO language like Python or Ruby.
I hereby place the above post in the public domain.
First, do we have any facts to back up the claim kids aren't programming as much as they used to? In an age of greater access, kids able to program is less? Maybe kids using basic are less, but what about the number involved in JavaScript for their MySpace pages? Programming is programming, and if we are just talking about what is your first exposure than we need to look beyond BASIC.
Next, the author obviously has not looked at python and IDLE. Instant feed back, and the ability to execute statements to see what they do immediately. While other aspects of python may be up for debate, python is the best language for teaching we have ever had.
Last point I want to make is that kids will overcome anything. I first started with basic, dealing with MS-DOS on a Tandy 1000 and a floppy drive. I learned how to connect to local a BBS and setup Kermit or ZModem to get files to learn more. I learned how to create my own programs and share them on the BBS. Compare that to the Internet and I had a huge barrier to entry - but I never saw a barrier. That's the gift of being a child, your curiosity will lead you and the only thing that stops you is someone tells you can't do that. Even then that doesn't work most of the time.
Python is easy enough to learn. Easier than BASIC, and much more powerful to boot.
... print 'sex'
...
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?
You want the truthiness? You can't handle the truthiness!
Here's a nice web page with a simple "IDE" for playing with JavaScript. Without too much effort, it could be extended to provide a nice enviroment for learning the language.
http://www.squarefree.com/jsenv/
"make Scrabble as a Java Applett!"
Hm.
It would be more easily done in AJAX, sans XML (unless you want score recording or multiplayer).
110100 1101000 1101000 1100110 0 1101111 1101000 1100011 1
I have made that observation myself. We have a few people with 3+ years of experience with C who are unable to answer what a linker ACTUALLY does with those libraries (or how they are used), what the difference between static and dynamic linking is (beyond "uh, the file gets bigger") and who use breakpoints extensively to debug their code but couldn't answer what an INT3 is.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
It's trivial:
10 GOTO END
--
* Using BAGIC language
Visual Studio Express is free. XNA Game Studio Express is free. Microsoft maintains the handsome Coding4Fun site.
Kid's Programming Language: Missile Command!
Introduction to Programming LEGO MINDSTORMS
Instant gratification is nice, but you quickly hit the wall with it. Yes, your first steps are leaps, but they are leaps into a dead end, because as soon as you have to get closer to the core with your code because your high level attempts are unable to reach it, you gotta backpedal all the way to zero and relearn (and more often than not, unlearn what you already know first of all) a very different approach.
It's a bit like Windows and Linux. Yes, the learning curve is a lot steeper with Linux, but in the end you can do a lot more with it.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
To build on what dhasenan said...
A kid playing soccer might eventually become as skilled as Beckham, or at least come close. There is room in the game of soccer for individual skill. 20 years ago, a programmer could write a state-of-the-art game solo, and you probably couldn't tell it from commercial offerings (as they were probably developed in the same fashion). There was room in the industry for an individual to shine.
Nowadays, however, the state of the art has progressed, and commercial games are developed using teams of 30+ people of various skills, from graphic artist to musician to programmer, and budgets of millions of dollars. An individual just can't compete against that. A kid playing soccer might one day play like Beckham; a kid tapping away on his computer will never be able to recreate Doom 3. It's just not possible. There is no room in the modern game industry for the individual at that level. Game designers might be celebrated, but not game programmers. Programmers are just one cog in the machine, and an easily replaced one at that. Kids want to dream of being a hero, not a cog.
Just because you're paranoid doesn't mean there isn't an invisible demon about to eat your face
The GP was remarking not just on the lack of languages, but the simple fact that right out of the box on day one straight in front of you was a BASIC command prompt.
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.
liqbase
There's plenty of tools out there for any kid who wants to learn, and they -are- doing it. The thing is that, unlike 20 years ago when the author was playing on his Commodore or his Apple, computers are in nearly every home. 20 years ago, fewer people, those more likely to be tinkerers and gadget freaks, had computers. Their children would, more than likely, get interested in tinkering with the machine as well. There's probably more curious kids tinkering with programming today than there ever were.
He talks about the death of BASIC as a bad thing because it "maps to how computers really work". I'm pretty sure that these days GOTO is considered harmful. Sure, we have all those that had to cut their teeth on assembly that still say it's the best way to learn but programming is -not- about pushing bits around - it's about logic and abstraction. In this day of high-level, interpreted scripting languages and 'limitless' RAM and CPU, why not start higher up the tree?
my sig's at the bottom of the page.
perl -we 'print "Big Tits" until 1==0'
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.
Some drink at the fountain of knowledge. Others just gargle.
You can code spaghettic crap in any language. Basic just made it easier which means you were introduced to the reasons *why* you should write plain, procedural modular code at an earlier stage,
Not without a jump/goto.
Why does everyone need to code? Keeping more people away from it is a good thing, which will raise the overall quality of code.
Have you read my journal today?
Several classes at once:
a. Python
b. shell scripting and intro to UNIX concepts (awk, sed, sh, etc.)
c. 1999 standard C, including "restrict" keyword
d. assembly (x86 and a popular embedded chip, including SIMD and OS instructions)
None of those are useless shit that nobody uses outside academia.
There is enough variety to avoid students getting weird ideas like
"all programming languages use curly braces" or "garbage collection
is always included and has no cost". Toward the end of the semester,
do a bit of benchmarking of various simple things.
A lot of the kids I know are exposed to simple line programming on their graphing calculators, TI model or what have you. That's how I got started.
BASIC is a horrible language for learning to code
So what, we're not talking about optimization here, we are talking about getting kids to sit at the computer, think logically, use APIs/Libraries, and CREATE!
Yes there are better languages to use, but don't forget just how many many kids found their calling in life despite the shortcomings of BASIC.
he is introduced at an early age to the computer as a toy and treats it as a toy while growing up.
This is a "good thing". It is the natural way to go. Small kids pick up a hammer, and HEY, it makes sounds. Toy. Later they go "hey, let's build a tree-house", still a toy, but becomming a tool. Finally they have a home workshop, and the hammer has become indispensible.
I have played hundreds if not thousands of games over the years. I still think of the computer as a toy. However, that doesn't stop me from getting paid a very competitive wage for working on it.
On a related note:
I tried some BASIC with my boys, but it just really wasn't working. I switched to Logo, and got better traction. Finally, I found GameMaker, and it is a real treat! I think it promotes an excellent balance of creativity, logic, and computer savvy.
Main GameMaker page here.
"We think people rightly feel that once they buy something, it stays bought," --Suw Charman, Open Rights Grp
Stroller.
I used to always use copy con
Seems to me absence of a line-oriented programming language is meaningless. The real issues are several:
1. The OS that came with your PC (Windows) doesn't include ANY programming language at all, line oriented or otherwise.
2. Today's entry-level computing experience is graphical/windowing oriented, not text oriented. Typing text in an editor (line oriented or otherwise) is not the next natural step for a kid who wants to make the computer do a little more than what his commercial programs already do.
3. When you're a kid, the very first program you want to write is a game. If you can't impress your friends with your very own game, why bother? A Pacmanish game using the text character set was pretty easy to write in basic. Even a rudimentary first person shooter is quite a bit more difficult.
Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
What may be confusing you is the complete lack of standards that many scientific fields, both comp sci (here) and neurophysiology (there) currently have to measure competency. When Bill Gates was given his honorary doctorate, well, it seemed like common sense. If you ask why, you look like a jackass: he is Bill Gates after all, and most people will argue that he has had a profound impact (regardless of good or bad, folks, let's not turn this into a flame war) on computing.
This is actually a serious problem.
The person who invented the alkaline hood was a seventeen year old fry cook. In the late 1970s, places like fast food joints had a serious problem: if one of those giant friers caught fire, it was just damned difficult to put out. Fire extinguisher, pah, and unfortunately, fast food doesn't attract the best or the brightest, so many people tried taking it out with water. Brilliant. It was some highschool kid taking a chemistry course who figured out that all you do is dump a bunch of alkalines on the grease, and wham, problem solved. Why? Because the alkalines turned the grease into soap, the fire sped the reaction up, and the soap doesn't burn. Yank the cord, a bunch of white powder drops down, and wham. Common sense, after a fashion; people advocate throwing baking soda on grease fires for the same reason. But this kid turned it into a reliable piece of safety equipment. Needless to say, he patented it, OSHA required it, and this kid was worth nine digits in just a few years.
Do we give him an honorary medical degree?
Now, before you yell "of course not," possibly after spitting soda or coffee on your keyboard (sorry,) let's think this through, yes?
When one asks why Bill Gates has an honorary degree, and keeps asking until an actual answer is had, two responses tend to come about. One is that he made a huge impact on computing that everyone who uses a computer is familiar with, or two, that he got stinking rich. The same is true in both cases of this kid: he had a huge impact on the resteraunt industry with which everyone who works at a resteraunt is familiar, and he got stinking rich. Bill didn't discover any fundamental algorithms or solve any capital-d Difficult problems. He's a pretty decent hacker (look at his Basic ROM before you disagree based on his employees' work, please) who happens to be a highly successful businessperson.
But we're not giving honorary degrees to Sam Walton, or to Sheikh Zayed Bin Sultan Al Nahyan, or to Larry Ellison. Nobody's chasing around the Vanderbilts, Carnegies, Astors or Rockefellers of this world around with a piece of paper stamped Ph.D.
There are three fundamental reasons that a university chooses to dole out an honorary degree. Mind you, this doesn't conflict with the single basis I gave earlier. If you want to find a way to flatter someone, you choose some physically adequate feature as a basis. Universities are very good at finding justifications ignorant of their motivations. Anyway, those three fundamental reasons are:
StoneCypher is Full of BS
The same ones they always did--at the age of 8, I was in the computer lab learning Logo. A year or two ago, while flipping through some Linux distro's preinstalled packages, I found Logo's open-source implementation. It's not that there's a dearth of languages, it's that teachers don't want to bother teaching it anymore. And that's a seperate issue entirely.
Tluin natha Linux xxizzuss uriu olt bwael mon'tun.
When I was 8 years old, I got an Atari 400. Mine came with two add on kits: programming and games. The games kit contained two joysticks, Star Raiders, and Missile Command. The programming kit contained a cassette recorder, a tutorial on BASIC, a BASIC cartridge, and a reference manual.
The first thing I did with the computer was hook it up verify that it works. Next, I played Missile Command. When that got boring, I played Star Raiders. When that got boring, all I could really do was learn to program. In fact, that summer I was pretty much home alone all day. The only thing on TV was soap operas and it was over 100 degrees outside. Programming was by far the most interesting activity available to me. Making progress and learning a new thing was exciting (and it still is).
Today, a kid would have 60 channels on TV, a game console probably with tons of games, and the internet to explore.
That said, I kept reading the article thinking: why not just download an emulator and program in BASIC on that? There are free emulators for the Apple II, Atari 8 Bit, and C-64.
Avoid Missing Ball for High Score
Okay, what part of x86 assembly coding does not mutilate your brain beyond recognition? :)
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...
You want the truthiness? You can't handle the truthiness!
And thats why Linus can't code Java ;) Its a good thing that whole Linux thing turned out ok for him. I'd hate to image him having to find a job with just those three on his resume.
Well.. maybe. Or Maybe not. But Definitely not sort of.
I totally agree. I learned IBM assembly language in college and we had to figure out our errors by reading a friggin CORE DUMP. Talk about nerve-racking!! But this taught us the fundamentals of computer theory, not to mention stuff like hexadecimal and octal base numbering systems.
This helps even today, where I still have to point out my integration testers that 1 gb = 1024 mb, 1 mb = 1024 kb, etc. You would be surprised at how many people are simply not aware of these simple things, people who work in IT. That is why our company imports so many software engineers from India or China. They seem to have learned more of the basic concepts.
Even though kids don't have BASIC, there are IDE's publicly available that allow kids to learn how to program in a fun way. I learned about this company while reading through Technology and Learning (magazine geared towards teachers/tech admins in the K-12 arena). http://www.kidsprogramminglanguage.com/
.NET. Now, I know many of your open-source folks are going to freak on that, but, any impression of programming on young minds is better than none. :-)
KPL uses the dotNET framework and allows kids to program in
How about this comparison?
... well, look at me now!
It is practically impossible to teach good design to students that have had a prior exposure to LEGO: as potential engineers they are mentally mutilated beyond hope of regeneration.
-with apologies to designers, engineers (especially design engineers), architects, LEGO company, people living in LEGO houses, etc. or anyone else offended by the comparison.
As with BASIC, kids love playing with LEGO. It's easy to grasp the concepts, but leaves enough space for imagination and creativity. Some of the kits today appear too purpose-built, you can't use your imagination to create much other than what's shown on the box.
No, I don't know where I'm going with this. But I thought it was a good comparison. I started with BASIC, and
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.
I started with apple basic in elementary school, and I didn't have a problem learning anything else later in life. The idea that by learning one language you somehow can't learn something else later, or have difficulty learning something new, is absurd. It doesn't matter how famous the person who said it is.
I thought I would be the one to propose Python first, but since it's been done already...
How about MIT Scheme? Nice, easy to use, powerful.
Besides, it also gives a great theoretical approach to computing.
Dijkstra's comment is hyperbole, not literally true, and is about the BASIC interpreter of his day, not later ones.
I first programmed in BASIC2 on GEM DESKTOP on an old Amstrad. I moved to QBasic later.
QBasic was a nice langauge, because it allowed you to write traditional BASIC code or procedualised BASIC (and mix the two). As I became more proficient, my code became more procedural.
I eventually moved to VB, then to C, then I leared Java, C++, PHP, etc.
QBasic was a great "gateway" langauge to programming. The fact that a limited copy of it came with every copy of MS DOS and Windows NT/2000 (and was on Windows 95-ME and XP's CD's), meant that it was always available and there was a great online community of QBasic programmers. (Until XP's release meant that most QB 4.5 apps broke.)
I'll never forget the good old variable type postfixes...
Remember also that Doom 3 (as is the case with most (all?) the big games) was written by a team, and requires much more than software development talent: Programmers, writers, designers, artists, musicians and composers all contribute to the finished project, and a single person with top-flight talent in even two of these categories is unusual, much less in all of them. Beckham might be the best football player in the universe, but I think he'd have a hard time winning by himself against a full team of average talent 13 year olds.
Well, not to dispute your main point, with which I agree, (my first two computer languages -- simultaneously -- were Algol and APL, talk about mixed paradigms) but:
BASIC is a horrible language for learning to code [...] It is not designed as a learning language.
Unfortunately, it was designed as a learning language: Beginners' All-purpose Symbolic Instruction Code. Of course it was developed in the era of Fortran and Cobol (and years before Paul Allen and Bill Gates created a stripped-down version for the MITS Altair), so I guess it seemed like a good idea at the time.
But Dijkstra mostly has it right, although he's a bit pessimistic about "without hope of regeneration". There's always some hope, although it's probably inversely proportional to the amount of BASIC the programmer has been exposed to.
-- Alastair
Somewhat OT, but: when I tried to RTFA (now you see why this is OT?), the site just showed a summary that ended with: "Click on the sponsor logo to read this article and all of Salon.com for FREE".
I don't see any sponsor logo. Maybe that's because I've got Adblock + Filterset.G Updater, or maybe the Javascript slammed into my NoScript extension.
Can someone confirm that surfing with IE would show some big flashy logo that you have to click on to see the article?
Anyway, if they make me choose between clicking on an ad and not reading the article, it's a pretty easy choice for me.
404555974007725459910684486621289147856453481154 in hex is "You sank my Battleship?"
[GPG key in journal]
Yikes, I think that you did not see the sarcasm in my post... As a scientist I believe that the "winning" is achieving the understanding and knowledge and the sarcasm was intended to be just that in response to a query on winning.
:-)
However, all of that said, I appreciate your post, the time you took to write it and I completely agree with the points you have made.
Now, I think it's time for *my* coffee.
Visit Jonesblog and say hello.
Back when I was learning I thought it was cool to be able to make a simple text guessing game, and making ASCII animation on a Commodore PET was just awesome. It'd be considered totally lame today.
Yeah, awesome! (reality check: it was pretty lame then too)
Oops! No, I didn't mean you! Yeah, you were cool.
This is bogus. There are many languages that are "easy to learn and give you a response quickly".
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.
- David A. Wheeler (see my Secure Programming HOWTO)
I'm surprised that none of the comments mentioning graphing calculators has been moderated highly.
While I'm not sure what options are available on newer calcs, I know on my trusty old TI-85 using TI Basic, we did a fair amount of programming. By we, I mean I had the good fortune to be in the advanced math classes in high school, and some of our assignments involved writing simple programs (i.e. factoring, quadratic formula, etc).
I remember that we'd discuss as a class how to write the program, with my teacher writing pseduo-code on the board. He gave us a brief intro to how to do inputs, use variables, and do output, and then we turned us loose, where we were free to work alone, groups, whatever for a few class periods. Granted, there were some students who'd just copy programs from others, but I'd say the vast majority learned about programming (and the math skills that are mentioned in the article) . . . Not bad for public schooling . . .
The other nice thing about this was being able to read other's code - there are plenty of resources to get TI Basic programs, and reading through the code helped me learn about new features and things (some unique to the TI, others that were just functions, algorithms, etc).
I started out programing in BASIC on my CoCo when I was a kid and I had no problem switching to C++ later.
Maybe I'm just weird, but the point is that using BASIC as a kid doesn't necessarily destroy your brain.
Everything I need to know I learned by killing smart people and eating their brains.
Today's calculators are yesterdays computers. A Ti-83 has about the same resources as an old computer, and it is very easy to write a simple program in BASIC. My first real programming experience was on a TI-83 writing games while I was bored in class.
...) so you can figure out how to program with no instruction. The BASIC on a TI-83 isnt very powerful, but it is very good at sparking a kids interest in programming.
I think it a great first language because you dont need to know anything. The calculator has menus of functions you can use (if, else, while,
I disagree. The main problem with learning OO code is that people overcomplicate it. Objects let you write spaghetti code that makes worst GOTO jungles turn green in envy. Based on code I've seen, that's what often also happens. However, this is not an inherent feature of OO; Java, for example, is no more difficult that C to get started with, and in many ways a lot easier (automatic memory management, built-in thread and GUI subsystems), but most Java projects seem to develop seemingly infinite layers of abstraction; everything gets turned into an interface or subclassed in weird ways, leading to a situation where it's impossible to tell what code is actually being executed at a given point. Add the fact that using threads and not sticking to Java Memory Model (which seems to be too bloody difficult to most people) leads to mysterious random NullPointerExceptions, presumably since the JVM rearranges code with the assumption that JMM has been followed.
The problem is not OO itself, but rather that people have no idea what problem it was designed to solve (the same is true for procedural programming, but it's a lot simpler so it doesn't show as much). Consequently we get code like I wrote: it looks OO, the same way random letters and spaces look intelligent text, but is completely inane.
I still say as I've always said: teach people programming techniques in the order they were invented. Start with line-number basic; when programs grow complex enough that subroutines start needing parameters and to call each other, introduce a stack made from an array and a pointer to its current position; then show that the computer can manage the stack itself (procedural languages, like C), and proceed from there. Let the students hit a problem first before showing a solution (and preferably let them work it out themselves); that way they have some idea why and where to use the solution.
Starting programming studies with a good dose of proper OO techniques (or any "good programming habits", even commenting) produces a programmer that has no idea why he should follow them, and consequently won't bother.
Bash ?-) It has a simple syntax and allows you to use hundreds of specialized programs for solving particular problems. Sure, it's no good for graphical UI, but for automatic background jobs it's supreme.
Forget magic. Any technology distinguishable from divine power is insufficiently advanced.
I don't think it's because the barrier to entry is too high, rather the barrier to do something cool is in the stratosphere.
Exactly. Who out there remembers Scorched Earth?
It was seriously the coolest game I had for my computer at the time, and it was free (well, shareware, but the author probably wasn't making a living off it). It was also pretty simplistic, but at the time, a free/shareware offering from some self-taught hobbyist was competetive enough to be "the best" for some of us, because things like HL2 didn't exist to compare it to.
The guy who wrote gorillas.bas probably had a similar sense of accomplishment; it was pretty basic (no pun intended), but visually similar to SE. The range of available software (at any price) has simply gotten wider, and its not as easy to impress your friends with a few hundred lines of.. well, anything. But without those interim victories to encourage a novice programmer, a far smaller percentage of hobbyists will go on to learn the (massively more complicated) set of skills necessary to take it to the next step.
This is not just programming... it's everything.
Programs used to be simpler and written by *ONE PERSON* - you could read and learn from someone else's code. Nowadays, most programmers are just a cog in a wheel using an IDE to implement one function in one library, and they rarely grasp the code in it's entirety
Cars used to be simple, mechanical entities where the underlying workings hadn't changed much in decades. Nowadays, cars are so chock full of electronics and there's hardly anything improvable by a single person these days
Electronics used to be "simple" - circuit boards were single layer and traces could be easily seen with the naked eye. ICs were standard parts you could by at Radio Shack. Parts could be hand soldered, removed, and replaced. Nowadays, parts are all custom, miniaturized, with 5-layer circuit boards, and they're just too complex for any one person to fully understand.
Phones and radios were originally very basic and simple and easy to understand / fix. Nowadays, we satellite radio and cellular phones that VERY FEW people understand enough about to actually work on.
People used to know how to do everything that it took to run a farm. Managing livestock, crops, construction, markets etc. Nowadays, people just vegetate in their condo, drive to work, sit in front of a computer, and drive home. They don't need to know how to SURVIVE.
I've said this before... if there were a catastrophic event that destroyed most of society, very few people would have enough knowledge to rebuild what we currently have.
Therefore, I believe that we as a society are getting dumber because we need to know less, and because modern medicine can keep nearly anyone alive long enough to reproduce, I'd say that evolution of the human species has stopped and that as a species, we're getting weaker.
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?
;-) My guess is that they've been exposed to VB (like one would be exposed to a virus or to radiation) and generally been braindamag^H^H^H^H^Hwashed by Microsoft.
It's hard to explain the inexplicable
-- Alastair
>>Why change what isn't broke. Let's keep things simple. For the kid's sake!
A quick search turns up several line-by-line basic implementations. (YMWV)
I'm a software engineer. I love writing code, but I'm afraid I'm not seeing the problem here.
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.
And I think you've hit on the central truth with that. Established industries discourage hobbyists. They frown on autodidacts. They recoil in absolute horror at ground-up innovation, because it's something they can't completely control. This won't become an anticapitalist rant (mostly because I'll keep reminding myself not to make it one) but it seems pretty clear that every fascinating, crucial generation of industrial hobbyist, from steam to electricity to electromechanical switching to tubes to IC to hex codes to kernel dev to OOP, has been utterly quashed by big business. Maybe not intentionally, maybe not by evil guffawing overlords in suits, but when's the last time you heard of a guy generating a novel new processor architecture with his C&C machine in rural Canada? He doesn't have the 65-nanometer process. What good is he? It's the same with programming. As a new field, the challenges, tasks and frontiers of programming were within the reach of the intrepid individual. The best games were still a single layer of functionality. Even sprite-based games (Commander Keen, anyone?) were mostly developed by, say, a dinner party full of people. Now there is absolutely no popular computer anything that hasn't been run through three or four separate levels of professional expertise and approval: from engineering through legal through gloss through marketing, back through legal, through sales and through distribution channels. This isn't all explicitly designed to shut out the individual. It's just the scale of the business. It's just the way it is. Remember Preston Tucker? Well, obviously it can't be that way forever. I can't think of any good computer anything that was primarily designed and advanced by a faceless organizational entity (ooh, this one should spark some replies). Innovation needs a place in the market. Where is it? I don't have a really well-defined or well-researched answer, but my general feeling is that much like film and music, a respected "indie" IT industry needs to develop. As intolerably pretentious as that sounds, we need a small-but-growing community of hobbyists, enthusiastis, people who author their own code and personalities who develop impressive, inventive things. Oh wait...we've got that. But the difference between the FOSS/Linux/Unix/whatever world and the indie film/music insustries is simple: The big guys, the money guys, the corporate guys, they haven't figured out how to live and let live. They haven't tried to ape indie culture a little, found they were mostly unsuccessful, and allowed for a slight reduction in their dominance in the name of more innovation in the total marketplace (even if it wasn't coming from them). I've seen this happen over the past 50 years in music and film. Maybe the big fat money guys aren't so thoughtful, but the industry as a whole takes steps to maintain its own existence, relevance and flexibility. IT isn't doing that. Someone doesn't get it. Actually, I'd say everyone doesn't get it. Look at other industries. There is a happy medium. Let's get there and be square.
I'm 17 and I know a whole host of programming languages.
I agree. Learning BASIC was the technological equivalent of being in first grade writing, "Mi dae at the zoo!" -- Of course it's not Shakespeare, but it's the foundation of literacy. No one expects an 8 year old to whip out an office suite and more than we expect him to write a concerto, or recreate the works of Dostoyevsky. The key point is that, for some kids, it's *fun* to write silly little programs in BASIC. Hell, look at MySpace right now-- I'm seeing CSS that's definitely the modern day equivalent of:
10 print "Tits!"
20 goto 10.
Yes, we all know Myspace is annoying as all get-out, but at least there are kids who are learning some of the fundamentals of interacting with a computer at a more basic level. Writing annoying profile templates is what's 'cool' right now, and I'll bet that the people who are 12-16, 17, etc, doing so will eventually tire of their childish persuits, and perhaps eventually start programming for real.
There are plenty of compelling easy-entry programming environments out there and they're all better than BASIC. Logo, Squeak, Scratch, StarLogo TNG, Linda, MS's Kid's Programming Language, etc. More information with links on my blog.
I know that doesn't seem to be an issue, but it is. The problem comes from the fact that you have to know a lot of information, for the subtle differences to make sense (and unless you know those, the code you write doesn't get past mediocre).
It's the same in all activities that require speciffic detailed knowledge: for photography for example, most people go around for the next +XX Mpixels camera and belive a more expensive camera will make them take amasing photographs. On the other hand a good photographer will get excelent results with a consumer camera also.
Good coding takes time, but programming wannabees don't want to know about that.
Tie two birds together: although they have four wings, they cannot fly. (The blind man)
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.
Being an avid Linux user I have to wonder where I would be if a young Linus Torvalds did not have access to his first computer (I think a Commodore 64) and if all the software he wanted was readily available. I guess we wouldn't have Linux. Maybe David Brin, the auther of "Why Johnny Can't Code", has a valid point after all.
I think his point was; as we are moving forward, which is good, let us not make the past obsolete in the process. To use his automotive analogy: new cars today are amazingly tech, but you can still buy a brand new recently manufactured 350 small block to put into your muscle car. For all the new the old hasn't been forgotten or written off as useless.
More importantly I believe the auther wanted to give you something to think about not complain about.
One other note: Why is it whenever someone writes something thought provoking there are so many people that view it as a last minute article to meet an editor's deadline?
Perhaps you didn't read my entire post. I certainly did see the sarcasm, which is why I wrote "Just because you meant it as a joke doesn't mean that saying it isn't a serious problem." I'm the first guy on the barrel telling inappropriate jokes, except about what I do for a living. You don't see me cracking wise about how Nintendo games are really a (insert paranoid theory here.) Why? Because some people take jokes seriously, when given by authorities.
Saying it's a joke makes it more serious, not less so. Glib disregard for your authority - as a neuroscientist teaching other neuroscientists - is frankly terrifying.
StoneCypher is Full of BS
My university used Java as a teaching language, but only had one or two classes that focused on actually teaching Java (one of which was the initial class, and managed to weed out a large portion of the fuckwits that were in CS because they thought they could make a lot of money). Basically, their assumption was if you didn't have the will to learn the language on your own, you were weed out material.
That said, I only took about a half dozen classes that actually used Java. The rest, used a lot of other languages, from ASM to C to Lisp. In all of those classes you were expeced to learn the language yourself (with help from the teacher/TA's). For example, in the Operating System Design class, there was not in class instruction on C++, but all the coursework was done with it. It was sink or swim for the most part.
Don't forget about kid specific languages like Netlogo and Squeak (http://squeak.org/).
The key is what "awoke a desire to learn more programming."
With my generation (I'm 24) and younger that's video games... and to a lesser degree robots and web programming. I went into Comp Sci because of video games, and finished my degree liking programming enough where I didn't need to program games after college.
Given the attention span of the current generation, kids need to see quick results. I would recommend messing around with the script editor in Second Life because you see results instantaneously. You can bring objects to life within minutes.
For making robots, there's Lego Mindstorms. For web programming I recently fell in love with Google's GWT, but that's a little too bleeding edge for some parents. Maybe giving them some html to "pimp out their myspace" might inspire them? I don't know.
int step = 5;
...
...
for (;;) {
step = myFunc(step);
switch(step) {
case 7:
(no break)
case 1:
break;
case NNN...
}
}
Guess what, it's even a recommended practice to model a finite state machine. And gotos would be more readable in some cases - for example when states have their own case statements.
The fact that you were using a brain damaged language isn't what enabled you to code in it. I was using Logo at the same age, and Logo is procedural, unlike Basic.
BASIC is fine without line numbers. Line numbers are stupid. There is no reason to use them today. When you program in assembler, you don't use line numbers. In fact, normally we use macro assemblers, and we have access to macros, labels, and other niceties so that we don't have to keep track of addresses, which would be the equivalent to line numbers in this case.
Now, I agree that IDEs are not an appropriate learning tool if they hold your hand too much. I'm picturing someone using VB as a learning tool, where you start typing the name of a function and it pops down, and you can look everything up in the online help. When I learned assembler (as much of it as I learned anyway) we did it on DOS/x86, and mind you this was just a few years ago. We used MASM, and its built-in editor (because it does build/test/debug) but it doesn't have all the niceties of visual studio, of course.
But look, if line numbers are the answer, it must have been a stupid question. Their day is done.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
Actually, I understood the GP to mean that lots of people sign up for CS programs, then wind up bailing or failing because they didn't know how much "extraneous" work was involved.
Just junk food for thought...
You learned BASIC because you just wanted to.
I learned LOGO on a Texas Instruments color computer the size of a spectrum computer (I don't know which model or processor but it was Z80s time, 1985 probably ), at age 8, and it had if, while/for loops, and a nice structured layout.
Even the rudiment of objects was there, with "actors", AKA sprites, you could draw some single-color character, then told it to move, and ok, everything worked right away.
We even built a little game with collision detection (the "you are a fish and you try not to bump into the other moving fish in the fishtank" game) .
Then some interactive illustrated stories.
At age 9, I did the second module, and learned BASIC on a green screen PC.
I couldn't believe how difficult it was to program with GOTO and GOSUB, and the lack of ability it had for simple tasks. And line numbering, I never understood that . Well, of course, I understood why BASIC was that way, when I learned assembly language 10 years later, of course.
This was all 20 years ago, but my point is that the good thing about BASIC is not that it was easy, it was much harder than other languages, much harder than Pascal, (from a human point of view only, of course, I know BASIC is much easier to implement).
The "BASIC" name refers to implementation, not programming in it. There's nothing basic about programming in BASIC. It's more complex for a human than structured programming, making sense of GOTO. Line numbers are unneeded complexity. What I think is that BASIC owes its popularity _only_ to availability, and not ease of use. Any structured language is much easier to grasp for people without any knowledge.
I think he just inadvertently brought forth a solution to his dilemna. A C64 emulator provides what he is looking for... A console based BASIC interpreter.
For this don't go to college/university, but evening class. A good college education is teaching you stuff BEYOND the mechanics of the discipline, so that one day you (OK, definitely not YOU, but a generic you) can contribute your part to human knowledge. Go and get your eyes checked, your myopia must hurt!!!!
Ohmm. There are a few places to download QBASIC still and it dose run on XP (if a little too fast to play Nibbles on a 3Ghz machine). Too lazy to create links though so here are the 1st site and the actual zip file I found there.
# QBASICm icrosoft/qbasic11.zip
http://www.uv.tietgen.dk/staff/mlha/Download/DOS/
http://www.uv.tietgen.dk/staff/mlha/Download/DOS/
--= Isn't it surprising how badly I spell ?
Jesus H Christ, what do you people have against Logo? FMSlogo is a free, Open Source implementation of Logo which even supports modern features like TCP/IP networking. It's procedural and straightforward, and most importantly it immediately gets kids interested in programming because they can type things and see things happen on the screen right away. Logo is in many ways the ideal first language for this reason. It doesn't teach you a bunch of crap you have to unlearn.
With that said, line number-based BASIC was a reasonable language to prepare someone for writing assembly code by hand, without the benefit of an assembler. It is a grave mistake to use it for anything else.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
The link leads to a page where I've found on big ugly Times New Roman Letters "Click on the sponsor logo to read this article and all of Salon for free". Okay, I click it, and then here comes the huge ad movie...
Gee, thanks... Instead of finding why the hell johnny can't code now I'm driving an Accura...
Er Galvão Abbott - IT Consultant and Developer
Look around folks....how many PHP scripts and scripters under 10 do you see? I see a lot of them. That's all code.
Hell, I won't even go into the Javascript coding and myspaces pages. Yes, lots just find code snippets and slap them on their page without thinking....but isn't that what most people did with our 10 PRINT "Hello World", 20 GOTO 10 BASIC programs?
I think your sig sums it up. You did have your brain mutilated but you learned C++ through brain-dinners.
I also learned on BASIC on a CoCo. Studying the long lists of code as I was transcribing it from the magazines until I knew what was going on. BASIC itself allows someone to destroy their brain. It does not force them to. Early on, I learned (un)maintainability of spaghetti code and made better use of GOSUB than was generally the case. I observed the code of others and saw how bad things really could be. I made myself more disciplined with my code because not being disciplined was incredibly painful when you were loading to and from cassette tapes.
The transition to other languages was not that painful. ASM caused me to be disciplined as well.
Simply stating [Citation Needed] does not automatically make you insightful or brilliant.
Not without a jump/goto.
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?
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
I learned BASIC first as a child, like a lot of people, then in college I went to Pascal, where I had to actually learn how to do things "right" then moved on to Fortran, C, etc.
It's pure bolognium that someone who has learned basic first can't be taught good programming. The fact that BASIC teaches bad habits doesn't make correcting those habits impossible. Correcting bad habits is practically what much teaching is for.
INTEGER OVERFLOW ON LINE 430
> LIST 430
430 LET Z=2^X+1
> ? X
X: 16
> 430 IF X CONTINUE
This was the great strength of BASIC.
Just junk food for thought...
On the BBC micro I don't think I ever used a GOTO or GOSUB. It was all DO...WHILE, REPEAT...UNTIL, DEFPROC and DEFFN (procedures and functions), etc. etc.
And then there was the built-in 2-pass assembler with access to the BASIC variables and functions. Truly an awesome (in the real, not the Californian sense) machine to learn on. Oh, and it had co-processors, floppy and hard disks, a network interface, a user-io port (digital and analogue), plug-in ROMs, etc. etc.
A 32-bit version of the BBC micro would *still* be an excellent way to learn programming. It was designed for the education market, and it was designed really well - elegant, fast (for the time), and structured. One of the best micros ever invented IMHO, and a tribute to the designers.
Simon
Physicists get Hadrons!
Most of your discussion is a matter of taste and fashion, but one point is I believe just plain wrong. Kemeny and Kurtz most certainly DID design BASIC as a learning language. A few minutes research on the Internet should make that clear. See http://www.columbia.edu/~jrh29/kemeny.html There's no way to know if they would have designed their language the same way a decade or two later. I'd guess probably not, but I doubt Dijkstra would have liked whatever they designed then any better. Kemeny (who has a record every bit as illustrious as Dijkstra's) and Dijkstra worship at different alters in the church of computing.. While I'm not particularly a fan of BASIC, I can't say that I'm overwhelmed by the products of Dijkstra's ideas. There have been innumerable times when I have felt that code readability would be enhanced by a few judiciously placed GOTOs. And frankly, I'd rather deal with a well written 50,000 line FORTRAN program than 3000 short "encapsulated" subprograms in some "modern" language. When a simple task is fragmented into more than 5 entities, I run out of fingers to mark pages.
You can't see ANYTHING from a car, You've got to get out of the goddamned contraption and walk...Edward Abbey
D'oh! That should read:
> 430 IF X < 16 THEN Z=2^X+1 ELSE Z=-1
> CONTINUE
Just junk food for thought...
What? You had lowercase letters? Luxury!
-- Conserve binary trees; recycle your email. --
We also had a file systems design course where we implemented the UNIX v6 filesystems (block devices, inodes and all) in Pascal. Now THAT was nasty.... (At the time. Now I see it as one of the best courses I ever took.)
Just junk food for thought...
I disagree with this for a fairly strange reason (Dijkstra's quote, not the rest of your post). I started off with BASIC, then moved on to x86 assembly and then C++. My first high school program was in QBASIC and as an extra credit program I wrote a huge graphical baseball game. It was *a mess* full of GOTOs and other horrible programming concepts. After writing this project I moved on to my school's Pascal then C++ classes. It took me about a day after working with real languages to realize how horrible those QBASIC practices really are. So basically the reason I disagree with you is because I learned the hard way exactly why GOTOs are bad. Maintaining a 2000+ line program full of literally hundreds of GOTO statements is next to impossible. When I compared my QB projects next to my Pascal and C++ ones, it was so much easier to read the code and maintain larger projects.
Basically...it's important to teach why you should *not* do something too.
Some have noticed, and the rest should - the article was written by David Brin, physicist and writer, author of some of the best science fiction novels of any era, but certainly of his - great stories, acceptable technical extrapolation, containing fascinating intuitive insights.
The pure programmers commenting here in various threads may object to Basic as a useful language, and even as a (beginning) training language, but Brin's viewpoint would not be that of a pure software developer. His background is as a physical scientist - someone with wide curiosity and extensive technical expertise. He believes that tinkering as a child with something like Basic, with its low barrier to entry, will foster general technical curiosity, introduce the idea of programming, and teach something about the plan of the machines on which it is run. Among those of us of a certain age, who has not heard engineers and professors complain about young people nowadays not being able to do general problem-solving because they have never spent extensive time just taking apart and reassembling machines (orignally it was cars - Brin's comments are dead-on there), and later, for some, early computers and other electronics, especially ham radio. My grandfather, a building engineer, took his first car, a Model-T, apart and spread it out all over the lawn before reassembling it, correctly. How many of us have done, or could do, that?
And how many of the programmers who, during the 80's, built the main 'infrastructure' of Unix, the Macintosh, and the Internet got their starts using Basic ten or so years earlier as kids?
I miss the Amiga...
I also don't know why the article writer doesn't get an emulator.
I took someone's advice from Slashdot a while back and tried to teach my daughter programming using Squeak. I made the mistake of stumbling around, thinking we would both learn about it as we go. It was a disaster, and after a half hour of fumbling with it, I gave up.
I started thinking about how to approach programming with her again, and I found myself wishing she could work with computers the way I did when I was a kid. Then I realized that all the computers I loved are still around as emulators. So I'm going to give it a shot again with a vintage BASIC book for kids and a C64 emulator. When she's comfortable with BASIC, I'll move her to KPL. I don't think kids will be put off by the primitive graphics if you start them early enough. My brother has been writing Atari games for fun, and my daughters enjoy those.
When I started programming, the thing I found that was hardest was working with the keyboard. BASIC on the Palm or Windows CE might work well as an option, with handwriting recognition.
ASM can teach you discipline or spaghetti code. Depending on whether your projects have to be maintained later. :)
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
n/t
?
[Start] [Accessories] [Notepad]
*typity tapity some JavaScript*
[File] [Save As...] "myscript.js"
[Start] [Run] "cmd" <Enter>
"cscript myscript.js" <Enter>
That's 'Out of your way'? Granted, it's not in the start menu, but it IS a global command from the command line. I mean, if you're programming, you expect a little system navigation, right? Hell, get 'em used to it early, I say.
110100 1101000 1101000 1100110 0 1101111 1101000 1100011 1
Another possible solution to this problem is PLT Scheme - a functional programming language with an 'IDE' that has a marvelous code-stepper, to watch each step of what happens, and which can be set for levels of language skill - beginner, intermediate, etc., whose error-messages are specific to that skill level. Oh, and it has a widely admired training book, How to Design Programs, as well.
Something like this would've been more likely (and more useful):
20 January 2017: the End of an Error.
Division of labor is good. If everybody has to be fully self-sufficient, that greatly reduces the opportunity to focus on a particular area and make advancements that everyone can benefit from.
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.
How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
I had prior exposure to BASIC. In fact, the only programming class I ever learned anything in was a summer "College for Kids" BASIC class when I was 11. After that, I was self taught. Paid for quite of bit of college writing shareware. When I finally got around to taking programming classes my 3rd year of college, I'd taught myself well enough that I didn't need to go to class except for the exams. It seemed most of the other students struggled. I hated group assignments in computer science classes.
My argument to Dijkstra would be it's hard to teach good programming to anybody. The person needs to learn it for themselves.
No operating system, no system calls, no object-oriented API -- just a BASIC cartridge, three books and a magazine subscription. I picked up some awful habits learning how make my code run faster.
Being able to examine and manipulate every single component of a system, being able to see how the entire thing worked, was an invaluable experience. I'm saddened that my boy may not have a chance for that level of intimacy and control over a computer. OTOH all the things I spent years learning are a natural part of his world, and in a few years he'll be doing things so far beyond my comprehension that not having a prehistoric computer is probably a much smaller loss than I'm taking it for.
This is not my sandwich.
I'd like to see you try to create spaghetti code in Pascal. It's kinda like the idea behind 1984's Newspeak: if certain words (like GOTO) don't exist in a language, then "bad" ideas (like spaghetti code) become impossible to express.
20 January 2017: the End of an Error.
Today, I work in an office developing applications in Visual Basic to support our sales teams. I know all about structured programming, and most of my apps are streams of CASE statements and sub and function calls. I haven't used a GOTO (or even an EXIT SUB) in years. I know that using GOTO's might make it marginally quicker to develop an app; I also know it makes it infinitely harder to maintain it six months down the line. So I make the extra effort to do things the right way.
I think the Visual Basic IDE is a good development environment. It gives me tons of easy to use trace and watch features, it automatically checks syntax errors (when I get on a roll, my typing is not so good), etc. I wish its error messages were a little less cryptic, but I had the same problems in Lisp and Pascal.
Granted, I'm not developing high graphics games, or interactive web sites, and I'm not conversant with Perl, Python, or php. So if someone wants to say they are better, I'm not going to argue. But to say that Visual Basic can't produce readable, structured code is just wrong.
What was once true, is no longer so
Consider the learning curve of C++ vs. BASIC!
Also... Which one was intended as a small educational language, and which one is a bloated 'design by committee' reference implementation of a fundementally flawed object model?
This article focuses too much on, 'There is no good "learning" programming language that is installed with modern OS's that kids can actually stumble upon and gain interest in.'
.vbs and run it, but how is some kid going to find it? It takes a programmer parent to show them. When I got my first computer it loaded a DOS prompt and I had to type a command to open windows, or a game, or whatever. This forced me to do something, and BASIC was there, one command away and I was in an editor just as easy as I was in windows.
Ok, someone pointed out you can create a
If I was 15 years younger I don't think I ever would have started playing around with a programming language. In this sense the article is right
However, I think times change and there are still plenty of opportunities. In jr high and high school math classes they are teaching kids how to program their graphing calculators that have easy to learn line programming languages on them. At some point this could make a kid curious enough to move on to VB or something of that sort. There's also the internet. Everyone wants to have a web page or customise their myspace page or something along those lines. Sure it's not mathematical programming, but it could be enough to spark interest in computers and programming.
As so many people here agree (and many disagree) line level languages may not be the best tools to learn how to really program. But I'm sure that we can all agree there needs to be somthing that sparks an interest in programming for an individual to actually pick up the trade. The CS program at the university I graduated from started with 2 semesters of Java, then C/C++, then you took a compilers course, and a micro architecture course, at some point you learned assembly. The point is some of this stuff that the older generations were forced into from the begining just seems boring to most kids until they are emersed enough so that the lower levels of computing can interest them. Sure when I started my degree just 6 years ago there were a handful of self taught programmers like myself in the intro level classes, but 75% of the new CS majors were interested in it because they liked using modern programs, or creating things on the web.
It would be great if we could just expect future generations to be inspired the same way we were, but it's not going to happen. The class room is going to need to evolve in order to get kids that don't grow up with geeky parents interested in coding. It's a process that's already begun, but as we know evolution can take time. The article has some good points, but it is kind of like saying that because modern cars are so much more complex and difficult to work on that we won't have enough people interested in Mechanics. No, we just need to realize times have changed and that we need to adjust our lines of thinking and the courses we offer students to get them interested.
The last paragraph of the article ...Microsoft and Apple and all the big-time education-computerizing reformers of the MIT Media Lab are failing, miserably. For all of their high-flown education initiatives (like the "$100 laptop"), they seem bent on providing information consumption devices, not tools that teach creative thinking and technological mastery...
Sums up the change in our society nicely. No longer are we citizens called upon to create our countries future. Instead we are more and more seen as nothing more than consumers whose purpose is to purchase the output of our corporate masters.
I work as a contractor at a large computer company. All the code i've seen coming out of my peers is spaghetti crap code. All in C. A lot more dangerous IMHO because they dont free malloc'd strings, lots of potential seg faults and just a general lack of understanding of the language. I had to spend an hour explaining why a standard function that returns a string pointer requires its returned string to be freed after use.... I still dont think he understood.
Not to mention a complete lack of understanding in the difference in how much time and resources it takes to process a file live on the disk compared to in memory. (small files, but still)
and he was at a complete loss at why his printcap processor took 2 minutes and mine worked instantly.
I'm no programming god, but SHIT! 2 minutes to process a printcap file with 10+ entries?
quite sad.
p r m t h s
Started with a Radio Shack Coco 2, 16k of ram. All basic, and it was a blast. Got me excited about doing more programming later on and tearing apart my old 286, which had to go back to the shop and get repaired. Then I tore it apart again after I got it home. Though successfully rebuilt it the second time around.
When I was coding on my old coco I did programs that had light cycles of tron, tape cassette drive access, and other fun stuff. I even tried coding pictures of Voltron and other fun things. It was neat to play with and simple. Got me more interested in doing computer programming and other things as well. No real structures or concepts to worry about right off. Just good clean fun and an introduction to take the first fun step to learning more if I decided to learn more.
Not many other languages these days are as easy to run a program in as basic was. You just typed 'run' and boom your off. This helped eliminate the boring parts because kids don't always have long attention spans. The fact that I could punch out a couple lines of code and run it instantly without dependancies, libraries, etc made it all the friendly to a new person.
Basic needs to live again as a default programming environment in OS's like back in the day. Nothing serious, just good clean fun to learn basic things in.
~~ Behold the flying cow with a rail gun! ~~
Just look at his "revolutionary" Holocene chat program, where he sneers the same way at IRC, impuning the chat protocol of choice for thousands of geeks worldwide - all because HE doesn't like it.
From the Holocene Chat FAQ:
Smell any bias? Last I checked, IRC wasn't primarily a place for "teens flirting shallowly online".
Want a simple, easy, accessible language for doing basic programming? Try
No, this all seems to be because he's stuck on the way he learned his first programming skills - and because he's got an old textbook that isn't forwards-compatible with the way beginning programming is taught today. Teaching methods improve over time, too, you know. Personally, I started on gwbasic, and remembered how fast it took me to get frustrated with it because I couldn't edit it in a plaintext format in another editor, being locked into it's binary format. Those are not the days I want to return to, and those definitely aren't the ways I'd want to force my kid to learn programming.
He never really explains why Perl or Python are somehow unsuitable, except to say they don't do things "the same way". It sounds more like they don't do things the same way he did them.
"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."
Why can't you do that in Perl? Even without knowing much about how to use Perl? Beats me. I'm sure if his sacred textbook were using Perl code, it would be no harder to do, and it would no less effective as a teaching tool.
Actually, I'm not saying that you need to learn it how I did. Matter of fact, I'm positive that it would be a massive waste of time as there were several now dead languages in there, not to mention entire systems. But, there are certain things that should be taught, so entire classes of errors due to lack of understanding can be avoided. Check out my previous post for a sampling.
The cesspool just got a check and balance.
I was never much into models. I did a pair of back yard rockets in scouts one year. And after my parent got divorced my Dad and I joined the local remote control car racing association. But I was never much for the acetone and plastic. I was much more of the nuts, bolts, legos, gears, etc... kind of kid. The joys of growing up in a family full of engineers.
When I was 10 I tried teaching myself Turbo Pascal, and failed miseralbly. When I was 13 I took my HS's first programming class, in Basic, another Basic class the year after that, then Turbo Pascal the year after that. Eventually wound up learning ADA in MOS school for the Marine Corps, but I wound up working in VB5/6 for four years. Ever since then it's been a mix of VB6, Java, PHP, and for the last two years primarily VB.Net, ASP.Net and HTML.
-Rick
"Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
What about GLBasic? I know that when I was a kid writing a program that could do graphics easily would be very exciting. The gurus of today never had an oppurtunity to try this kind of stuff when they were starting out.
I don't know if you consider this "not worthy", but if you want a successor to Hypercard you should check out both Supercard and Revolution. I don't know if they are as kid-friendly per se, but Revolution offers a superset of Hypertalk and runs cross-platform with a ton of additional features.
In fact, it's one of the best cross-platform RAD tools out there.
www.runrev.com
How could you possably live without: ... ... ... ... ...
50 On I goto(100,200,300)
60 stop
100 print "Am I here?"
200 print "or here"
300 print "or here?"
The reason we subjugate ourselves to law is to better procure justice. If law does not accomplish this purpose then it m
"So what, we're not talking about optimization here, we are talking about getting kids to sit at the computer, think logically, use APIs/Libraries, and CREATE!"
From the sound of TFA's description, we're talking about a kind of BASIC that doesn't have libraries or APIs, nor a variety of useful functions. It sounds like the kind of BASIC I knew when I was a kid, which nobody (even children) finds useful for creating anything of any interest these days.
Logo. Of which there are several modern implementations oriented toward pedagogy.
I don't think being line oriented has a lot to do with that: having an "immediate" console environment and plain-language commands helps: I think, aside from Logo, REBOL would be fairly easy to teach young novices.
Heck, for kids of my day, back in the 1980s, if it didn't play music and provide some kind of multimedia experience, lots of people weren't impressed. Two of the most popular things among my fellow TI-99/4A BASIC-using elementary-school classmates were animated sprite graphics and sound/music programming (which the -99/4A did far beyond the "bell" level.)
So, yeah, kids today expect more. If the people teaching them kept up, I don't think this would be much of a problem: modern descendants of BASIC and Logo that provide exist whose graphics and multimedia capacity has kept up with modern demands seem to be available.
http://en.wikipedia.org/wiki/HyperCard#HyperCard_c lones
"I'm a Laver, not a Phyto[plankton]"
>Not to knock VB, but if you learn BASIC or VB you can
...
>basically program in... BASIC or VB.
You know, I used to knock VB, but VB.NET is actually quite nice. And it's nice, for example, to grab some database lookup code from my web page and pratically drop it in to a Word macro.
As for a learning language - I mean, big deal, line break instead of opening bracket, "End If" instead of closing bracket, "Sub" instead of a function returning void, etc. If that's a big barrier to a switch, then perhaps somebody doesn't have the aptitude anyway
For nearly two decades now, "computer" has been synonymous in most peoples' minds with "window-based GUI featuring graphically-intensive, networked applications." This presents a huge problem when it comes to teaching kids how to program.
As a 12 year old, I taught myself BASIC on my family's aging Commodore 64. At the time, DOS was in its heyday and I remember thinking to myself "if I get good enough at this thing, maybe I'll be able to write an application like Word Star or Telemate!"
In other words: in 1988, I was motivated to learn BASIC because of tantalizing opportunity to write actual, relevant software. After your first "hello world" or "What is your name" or "20 goto 10" program the fun of coding for coding's sake quickly goes away, replaced by a desire to create meaninful, useful software.
Now then: how likely is it that a kid will be able to write something he identifies as software using only a BASIC interpreter and simple, terminal-oriented I/O? Not bloody likely! If you sit a kid down to teach him BASIC, he'll quickly get bored out his mind, just as surely as *I* would have been bored out of my mind if I'd tried to learn Z80 assembly as a 12 year old. I thrived in the early days of my programming career because I was able to make small programs that were relevant and useful to me, my friends and family
So: don't teach your kids BASIC. Teach them Logo or HyperCard or Macromedia Flash -- focus on languages that have a solid IDE, a gentle learning curve, and most importantly, produce relevant (graphical, interactive) output.
Personally, I've had tremendous success by going one step further, and teaching ptogramming in the context of a virtual environment. I've been using Second Life as a teaching tool. Its C-like scripting language (LSL) is easy to learn. Because scripts are attached to objects in the 3D world and are capable of influencing position, velocity and appearance of the objects, it's possible to very quickly produce sophisticated behaviors with just a little scripting.
In addition to the basics (variables, input and output, arithmetic expressions), LSL introduces kids to many relevant high-level concepts: message passing and event handling, Cartesian coordinate systems, vector math, and basic physics, to name a few. Since it's all online, there is an additional social element to the experience. Your kids can show off their inventions to others and get programming advice or feedback in real time.
If you want your kids to catch the programming bug, and they already show interest in 3D games or multiplayer virtual worlds, Second Life wouldn't be a bad place to start.
I started with BASIC. I had no trouble grasping, still in my elementary years, Logo, Pascal, DOS Batch programming, or Forth. When I got to C, I had no trouble there. OO programming (Object Pascal, C++, and Objective-C, which I ran into all pretty close together) took me longer to take to really well, though.
Well, yeah, if your taught that the right way to program is the worst possible BASIC program, its a big paradigm shift from that to structured programming.
OTOH, if you are taught to modularize in BASIC, its not a great big leap, and you actually appreciate the features of structured languages when you encounter them.
I think its more a matter of how you are taught than what language, though of course certain bad habits are impossible in some languages (and certain good practices also.)
I don't understand. Isn't that exactly how Bill Gates, RMS, and every regular schmoe like me looked at computers when they were kids? Yet we programmed our asses off and ended up becoming professionals.
You can stand behind behind your kids with a whip if you want, saying "NO! Stop having FUN! Grit your teeth and do it GRIMLY like a good worker!" Just remember that treating the computer as a toy has an established track record of producing millionaires and brilliant technologists.
i'm pretty sure that Perl is easier than Basic!
Anything that requires parental intervention is inferior to BASIC.
Oh, and BASIC in old personal computers let you PEEK and POKE arbitrary memory locations, the meanings of which were documented in the manuals shipped with the computers. You could write to video memory, mess with memory-mapped hardware, hack a running OS, stuff like that. I never did it because I read I could permanently damage the computer, but I guess some kids were less wussy than me :-)
If you want to get really advanced, you can make a FOR loop and Poke in a different text color for each one:
:)
10 FOR X=0 TO 15
20 POKE 646,X
30 PRINT "BIG TITS"
40 NEXT X
50 GOTO 10
*NOW* you have a good program.
Comment of the year
I agree with you, but I have nothing to back this up except intuition.
But it should be possible to write a python class wrapping around a gtk widget or whatever that would provide an interface pretty much identical to the old basic drawing commands. s=Screen(), s.line(0,0,1,1), s.box(10,20,10,40), or whatever they were.
That is my first thought about what might make python a starter language for kids. Another thing might be to emulate the old sound facilities in MS basic.
I am not sure whether the gotchas in python would be too confusing for young learners (e.g. the difference between a=b and a=b[:]), or whether they would never be hit.
Languages produced for practical use by non-geniuses are almost always OO these days, viz C++, Java, Python. Languages produced by mathematically and theoretically inclined people tend to have OO tacked on later by other people, viz Scheme, Haskell, ML. (Note that Scheme is very OO, but OO in a theoretical sense, so you'll have a hard time convincing J. Average Programmer that it's OO.)
And all the "unnecessary verbiage" is included to help J. Average Programmer work on huge apps in complicated environments with tons of other non-mathematically inclined people. People working on clean, simple, mathematical problems would rather live without it unless they absolutely need it. Once again, viz Scheme and Haskell vs. Java.
I think you're getting theoreticians confused with big-iron, big-problem engineers. Professors come in both types. The mathematicians are on your side.
...if it's any consolation, Microsoft gives out basic versions (pardon the pun) of Visual Basic (and other languages) free for download.
l oad/
http://msdn.microsoft.com/vstudio/express/vb/down
Thanks,
Mike
I guess I'm lucky then, I'm studying civil engineer - electronics & computer sciences in Leuven (Belgium) (finished the 2nd year now) and in the (object oriented) programming class they forced us to first draw out UML diagrams of all our classes. Also, we had to put comment for every class, function, variable, ... using a specific system. The only annoying thing was that the comments usually took up more space than the code itself :).
Also, about the math education. We got quite a bit of math subjects, for example we had courses named: analysis 1 & 2, linear algebra, applied discrete algebra, numerical mathematics and probability & statistics (note that those names may not be ideal to describe what was teached in those courses). Now, I'm sure there's litterally tons of things I don't know about mathematics, but as far as I can see, this should cover a pretty broad base, especially as far as programming stuff goes.
All the courses given in 1st year builded upon the knowledge learned in high school, in fact about 80% of the linear algebra course, I had already learned in high school. However, that was because I had 8 hours of math in high school and one can choose between 4/6h (depends on what you study) or 8h in the last 2 years of high school. The people who have 8h math get 4h algebra & 4h other math, whereas the people having 4/6h of math only get the 'other' math.
Also we had a course called "computer aided problem solving", which I suppose helps develop the skills needed to plan out an "algorithm" to solve simple problems.
So maybe what your saying might be true for some institutions, but definately not for all of them. That or I'm blinded and brainwashed by propaganda, hehe :).
. . . he was /.ing during Computer Science class.
Klingon Software is not released, it escapes, inflicting terrible damage onto the enemy as it does
But to say that Visual Basic can't produce readable, structured code is just wrong.
Don't confuse the issue by discussing Visual Basic along with the various dialects of the language which was commonly supplied on many computers aimed at the home market in the mid-1980's. The two are completely different.
I went from Basic to Assembler to C. C was a breath of fresh air.
The problem I have with computer 'scientists' slagging off Basic is that all the stuff they say is based on subjective aesthetics. They don't seem to understand anything at the hardware or even assembler level, and they don't seem to build up theories that has been tuned by experiments like real scientists.
E.g. the idea that GOTO is somehow inherently bad is completely bogus. C compilers user JMP instructions all the time, it's the same thing. Of course, the Basic-ism of using GOTOs all over the place, passing parameters to GOSUB'd procedures in global variables is horrible. In fact it's worse than assembler, where you can get parameters and local variables by using the stack and registers. But there are legitimate reasons for JMPing, which is why the processor supports it, and why C as a sort of portable assembler does too.
echo -e 'global _start\n _start:\n mov eax, 2\n int 80h\n jmp _start' > a.asm; nasm a.asm -f elf; ld a.o -o a;
Anyone who would encourage children to code in BASIC should be investigated by child-services.
Would I prefer today to code in BASIC instead of the Perl, Matlab, and Fortran that I now use?
AHHH Fortran! You poor soul you. The only thing I would pick programming in Fortran over is COBOL, I hate both those languages and much prefer PERL and C/C++.
Hey, there is only one Return and it's not of the King, it's of the Jedi.
a function with lots of if else based on a passed in parameter with recursive calls back into the function.
The cesspool just got a check and balance.
Modern languages are more difficult than Basic. That's natural, of course, modern languages offer much more.
.equals method
When Basic was the primary choice, one had to learn few concepts:
1) variables,
2) control constructs like FOR and IF,
3) the API i.e. the various commands the language had,
4) the simple execution model that executed one command after the other.
Nowadays one has to learn (for Java, for example):
1) the concept of class
2) the concept of instance
3) what is inheritance
4) what is encapsulation
5) what is message passing
6) the concept of constructor
7) the difference between primitives and objects
8) the many different statements
9) exceptions
10) threads and synchronization (otherwise you can't use Swing)
11) the package system
12) scope rules
13) inner classes
14) what is garbage collection
15) what is a pointer and what null means
16) why strings can not be compared with == but with the
17) many other things I certainly have forgotten
Or for a functional language (Lisp, ML, Haskell etc):
1) what is a function
2) what is the lambda calculus
3) what is currying
4) how functions are first class entities
5) what are logical types
6) what are type classes
7) what is garbage collection
8) what monads are (good luck on that one)
9) what closures are
10) what is tail call optimization
11) what is recursion
12) what an FFI is
13) the module system of the language
14) the concept of list, head and tail
15) the concept of nil
16) the Hidley-Milner type checker mechanism
17) infix, prefix operators and operator precedence
18) lazy evaluation (good luck on that one)
So what was once the fun exercise of putting together a bunch of commands to achieve some functionality, has now become a PHD thesis...no wonder why people are discouraged and don't program for a hobby any more (kids especially, since they are spoilt as well).
The students with no previous exposure consistently (from year to year) did significantly better in Intro to Programming 101 than those with previous Basic experience.
We pushed and eventually succeeded in getting Pascal taught rather than Basic but I was not still teaching to see if this improved things.
But I don't think that's the articles point - its point is you can't just walk up to a computer and start programming anymore. That's how most of us old geezers got started, even if was a card punch machine that we really old geezers first walked up to.
Squirrel!
LOGO was interpreted too, back then.
Python,
javascript,
perl, all are interpreted.
Availability is key, marketing too.
You're right, there are no gaming libraries for BASIC, it would be pretty much useless.
There are however definately libraries and APIs. Every time you call CLEARSCREEN (or whatever), you are calling a system API that does a loop to the appropriate video RAM spot to print all spaces. The interpreter gives you the "library" wrapper to make that easy. I still remember when it seemed so cool to erase the whole screen with the flick of the wrist.
Also, once you dig a little deeper, all BASICs had their various ways to call firmware routines, which was often how we got access to "sound" or time, or that cool connector slot in the back.
"We think people rightly feel that once they buy something, it stays bought," --Suw Charman, Open Rights Grp
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
No wonder you had problems, you don't just mistype characters you replace two characters with one (g=ch)!
Hey, there is only one Return and it's not of the King, it's of the Jedi.
And where is the ^G?
I was writing Commodore 64 code. I don't remember how to make a C-64 beep... I do remember it doesn't have a "BEEP" command like other BASICs. Hell, I'm just glad I remember the POKE code to change text color.
Comment of the year
Why not just get the real thing and teach Smalltalk rather than some new scripting language like Ruby? I don't have much of a problem with Ruby, but there sure isn't anything that is has that Smalltalk doesn't. Ruby does borrow a lot from Smalltalk, to be sure... but why not just go straight to the source? Among many other perks, Smalltalk a lot more mature, a lot faster, and perhaps most importantly of all Smalltalk has some of the best development tools around. Not big, complicated IDEs like MS Visual Studio, but smaller, lighter, intuitive but incredibly powerful tools that have been refined since the dawn of the GUI and of Smalltalk itself.
Just a thought!
Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
> I can't find a worthy successor to HyperCard
Lord, you give them eyes, but they cannot see.
It's called "The Internet". Graphical, clickable pages, i.e. cards, with hyperlinks taking you to other "cards"? Hello, Bishop?
(-1: Post disagrees with my already-settled worldview) is not a valid mod option.
Lua has got awfully little attention in this discussion. I admit that I haven't tested it yet myself, but got really interested when it was mentioned in the book review Write portable code as the author's tool of choice.
Lua's about page suggests that it could be an even better tool for learning than Python is.
Yes, hidden behind every if/then/else and switch statement are actually instructions from the JMP family, true. However, that's because that's how the hardware operates. if/then/else, switch, etc. are all wonderful, advanced mnemonics for JMP -- indeed, they supersede simple mnemonics because they encode more logic into it, and wrap it all up into a bundle that handles multiple JMPs in one graceful, easy-to-understand syntax. An if/then/else might use 4 JMPs, a switch, as many as you have cases AND breaks. But because of the syntax, you don't have to track all these de facto GOTOs and make sure they all work together.
The problem with GOTOs isn't their behind-the-scenes necessity; it's their ability to leap around the logical structures and syntax built into a language, thus defeating the purpose. If I can GOTO something halfway through a case statement, bypassing the switch and any logic in-between, then my logical design is arguably flawed since it doesn't account for the case (so to speak) that the GOTO is used for.
(-1: Post disagrees with my already-settled worldview) is not a valid mod option.
This is mentioned in the article in parent's post:
http://pine.fm/LearnToProgram/
I'm going to give this to my niece when she's a bit older.
Watch your job go offshore? Game's over, for a LONG time now.
Better to go to law school.
BWilde
If you're writing non-trivial, well organized procedural code, you've got some code organized along OO lines.
For many of these languages it's not like you're tied into the OO model. C++, Perl, and many other languages specifically bless saying, "screw it, plain old procedural programming will be the most expressive solution for this." But if you end up with an OO design, which you almost certainally occasionally do, the language gives you more support. Your refusal to seriously look at object oriented languages is just a refusal to consider that perhaps there is more than one tool in the programming toolbox.
As to how verbose OO languages are, that's an artifact of particular languages. You and I have written freaking COBOL! That's hardly a terse, efficient language. Some OO focused languages (C++) tend to be more verbose. Various languages have varying levels of verbosity.
As for Perl being taken over by academics, utter nonsense. Perl is about freedom of choice, about having access to a large number of tools so you have just the right tool for any given job. If you feel a procedural solution is the best one, Perl agrees. Did you want an object oriented solution? Perl's game to try. Functional? Perl's up for that. The Perl 6 work is trying to make Perl more unified and to strengthen the OO support. Indeed, OO support in Perl 5 is really a bolt-on job; Perl 6 promises to be easier to use, less clunky and verbose OO support. And if you don't like it, well, no one will force you to use it.
Search 2010 Gen Con events
Python's a great languages, and one of my favourites for a lot of the things I do at the moment. I think a lot of it has to do with the cool-ness factor, though, and being able to do something that seems comparable with software role models. (Whether that be commercial software, or otherwise.)
When I was first playing with computers, though, the "cool" factor that motivated me at the time was the ability to get away from scripting languages, because none of the commercial apps, or even downloaded shareware apps, that I used from day-to-day were written in scripts. I grew up playing with line-numbered BASIC programs on an Amstrad CPC, and later writing QBasic programs and batch files in DOS that did some quite tricky things, but none of this was really comparable with the sort of software that could be bought off the shelf.
When I got to secondary school and had access to the computer labs, it was fantastic, because the school had a Pascal compiler. (Turbo Pascal 6, I think, and later Turbo Pascal 7 which came with the wonders of syntax highlighting in the IDE.) Being able to actually write and compile code to executable programs that obscured the source code was pretty cool, as was writing little network chat programs that communicated through shared files (IPX network protocols were a bit beyond my reach at the time). I even found a BBS door game library (albeit closed source) and wrote a couple of simple BBS door games.
That's probably what convinced me to teach myself some assembly language, pascal, and eventually C (all of which the school had compilers for) before I went on to study the whole architecture side of things more formally in Computer Science at university. Ironically now that I've grown to use open source much more, obscuring the source code in an executable seems much less interesting.
Nowadays I'm not sure what would motivate people more -- my guess is imitation of things that are really graphical, or maybe things like fancy network communications, at least for people who grow up playing today's popular games. The easiest way to that is probably through things like level editors rather than line-based programming languages.
Brin's point is a bit muddled, but I think the idea is that modern scripting languages that seem like the logical replacement suffer from being too smart, too high level. Basic as shipped on many early home computers had the advantage of being relatively stupid. Sure, it was high level compared to assembly or even C, but it typically came with almost nothing in the way of supporting libraries. Modern scripting languages come with huge numbers of useful libraries. As a developer I love them; I spend less time reimplementing the wheel and more time solving new problems. But as a beginner these libraries can be a crutch.
I'm torn. On one hand, we're talking about kids. 25 years ago a simple text game was still cool, it was enough to inspire a child. Today, good luck. Newer, richer languages allow a child to create something interesting by modern standards.
On the other hand, your average kid is never exposed to the more primitive way of programming. It's the crude equivalent of making children learn to do division long hand before you let them use calculators. You've hidden some of the complexity, so the kids don't respect it as much. If a line of code and some clicking displays a graph, it's less impressive than having to type in all the code to display the graph. For those kids interested in computer programming, you might have set up false expectations. While by and large programmers work at a high level, you do need to understand what's going on under the hood. If you don't you won't be able to fix it when it breaks, or adjust your code to compensate. I'd hate to see a generation of potentional programmers all excited that they made a game using some game creation system, get to college and be hit with the low level stuff that seems completely unrelated to what they're doing, then drop out. Early exposure to the low level guts might chase off some kids who really don't have it in their hearts, while giving the interested ones a more realistic view of the complexity of programming.
Search 2010 Gen Con events
Illiterate jerk!
That's 'Out of your way'?
Yes. Because noone is going to find it by accident, wonder what it is and what they can do with it.
LOGO isn't interpreted anymore?
I was under the impression that Python wasn't so much interpreted as compiled to bytecodes which ran in a special run-time environment (kind of a lightweight JVM). Javascript and perl are interpreted, true, but you can't really interact with the interpreter directly (unless that's what the perl debugger is, I actually haven't used that).
The public library in my home town had a couple of Apple ][s (back in the early 80s) with Logo on them. I wrote an assembler routine that let kids print out their graphics (hires screen to a Grappler printer card, those were the days!) and defined a Logo "word" to invoke it. I always wanted to teach a kids programming class there, but by then I was in college so I never had the opportunity. I hope somebody else did.
Just junk food for thought...
Dealing with those LEAKY powerfull high-level abstractrion? You can bet so.
Rethinking email
Admittedly there is something to be said for the manner BASIC interpreters (and any others besides) were supplied with many personal computers in days of yore, but let's not get ahead of ourselves. The way some of the guys posting here are talking, you could be forgiven for thinking that all those who cut their teeth in such an environment were masters of the science of programming and nobody who learned in any other way will never achieve such greatness.
There were good programmers in those days just as there are good programmers now. My suggestion to those who keep whining on in this way is to cut the BS, as they're all beginning to resemble the same broken record...
It's a more general computer language, though, and doesn't come packaged with standard modules for simple graphics, sounds and a Inkey$-like function. I learned programming in QBasic, and the IDE was just as important as the language for ease of learning. Function-help and a nice and well-organized help file are invaluable for poking around and going 'what does this do?' and 'is there a function for...?'
In a fair world, refrigerators would make electricity.
You say this as though it's a bad thing?
HyperCard was pretty impressive. I learned to program in HyperCard in 6th grade. I made this presentation that played the individually-coded notes of Row Row Row Your Boat with a boat that moved across the screen, transitions, hyperlinks, all sorts of cool stuff for a 6th grader. It was a great early introduction to web programming, closely resembling a mix of HTML and Flash...and that was in 1992.
I wish I still had it. That HyperCard stack was probably the single most significant thing that got me into programming.
You're making a case for Pascal.
(oddly enough, I *like* the c++ class model. I just hate the template libraries)
Yes, if you break it down to ASM. But that's kind of why higher level languages exist - to abstractify that shit so it's readable, and to limit the kind of jumps that programmers can make so they make some damned sense. Hopefully.
... and this is valid c code - it compiles and runs just fine. The're only the one block - you can put all the action on individual lines, and make it as BASICy as you want. int main() { L10: printf("hello, world\n"); /*... stick other statements here */
L100: goto 10;
L110: return 0;
}
Blocks (except for main() are completely optional in c. Of course, you have to be an ID-10-T not to take advantage of them ...
And you can do the same in assembler ...
BASIC on the Atari 400/Commodore 64/ is a better education tool than modern languages because:
1) BASIC has immediate feedback. You can type in a BASIC statement and execute it immediately.
2) The BASIC UI is minimal. There's nothing but a command line and something that might be considered a text editor if you compare it with cat. Nothing else.
3) BASIC has infix syntax. You added numbers together with a + b, not (+ a b) or a b +. This is not to say it's an intuitive language but those sorts of things kept the kids able to do basic (ha ha) sorts of things early on.
4) BASIC gave you easy access to simple raster graphics, keyboard input and sound. Nothing fancy but you could do noticable things in one line.
5) The BASIC interpreter owns the machine. There's no multitasker at all, just the BASIC interpreter. This meant that (among other things) the screen stays the way it was when you plotted it.
If you want to plot a sine wave using a modern programming language, you generally need to:
In BASIC, you just plot it and it stays that way until you type clear.
By the same token, if you want user input, you just read inkey$ repeatedly. You don't need to process input events or worry about busywaiting. You just loop-and-read.
6) BASIC is the operating system. Which means that BASIC programs can bang on the bare metal. They can (and did) install machine-language programs and then run them, and those programs did all kinds of things, including tossing away the BASIC interpreter entirely.
7) If you seriously screw up your computer with a programming error, you can fix it by turning it off and then turning it back on. There was no hard drive and you could take the floppy disk out of the drive before running your program.
8) Oh yeah, and there was a culture of type-in BASIC programs back then.
This is not to say that BASIC, as a programming language, does not suck in amazingly profound ways. However, it lets you start doing simple stuff right away and go from there into learning the reality of computing.
That being said, there's nothing preventing someone from writing an equivalent sort of thing that runs off a floppy (or hard drive--why not) on your old PC. It would probably have less code than that PC's BIOS but it would get the point across. But if you do, please design a better language than BASIC.
Also, I think that perhaps the closest thing you can get these days is Squeak. It's a large, complex system but the entire thing is viewable and editable all the way down to the machine. The virtual machine, granted, but there's still a nice path from high-level to low-level.
Spaghetti code makes sense- it's just a lot harder for a human brain to follow. If you think like a computer, it's no problem to read it.
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
That's right -- csc.exe ("C-Sharp Compiler"). Check out:
. exe on my XP box... It will compile C# code, along with any .NET classes. And because C# is a Java clone with a couple elements of syntactical sugar (foreach() and properties come to mind), it's relatively-easy to pick up and learn.
.NET has been out (since 2001 or so) and standard on home desktops (a couple years).
.NET, during the post-Win95 (IIRC, MSFT stopped offering QBASIC with their OSs after Win95) period to .NET's release and widespread desktop installation, the article's premise that easy-to-find-and-use compilers being unavailable is correct -- there were no compilers included with the world's most-popular OS for several years.
C:\WINDOWS\Microsoft.NET\Framework\<version number>\csc.exe
I have C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc
Of course, MSFT doesn't advertise this because they don't want you avoiding their horrifically-expensive (but very nice) Visual Studio suite. And this has only been the case as long as
Prior to
That said, I don't think this is the only reason Johnny can't code, though it's probably a significant one...
Is Capitalism Good for the Poor?
As one of the many who learned to program when I was very young (8?) on an Apple II, in line-oriented BASIC, I'm sympathetic with the author's cause. However, his dillema is easily solved by downloading one of the dozens of Apple II emulators available.
http://www.zophar.net/apple2.html
Well now, that depends *ENTIRELY* upon your perspective, now doesn't it? They claim that BASIC interacts with the computer at a lower level than C++. Now in *YOUR* interpretation, BASIC is an interpreted language (not compiled), so you need to have an interpreter running in the background decoding line-by-line and turning the lines into machine instructions, which are then executed. There is also a envirnoment established so that signals can be intercepted correctly and returned to the basic program/interpreter. Thats *YOUR* perspective. Their perspective is that BASIC is running at a LOWER (easier) level, not for the computer, but rather, for the person. When they talk about BASIC running at a lower level, they are not talking about the level with which the language interacts with the computer, but rather, how the computer interacts with the person. BASIC is running at a lower (easier) level than C++. They don't even have an idea of my explination of the comparison between compiled and interpreted languages. They don't even know that such things exist. They can tell the difference between 'easier' and 'harder', and thats what they are trying (in vain) to explain.
http://www.qbasic.com/wbb/filebase.php?filebaseid= 1
Quite right! So what should we do about it? Do your kids see you programming? If so, do you tell them what you're doing, and try to explain how it works in words they can understand? Did you help them get through their first void main () { puts ("Hello, world!\n"); /* We don't say "big ***s" around little tykes! */ exit (); } ? Show your children that computers are more than a fancy DVD player/video game/net connection. If you don't, who will?
Since TFA mentions One Laptop Per Child somewhat derisively in this context, I'll mention that their Fedora environment will come with Squeak pre-installed. For those of you who don't know, Squeak is an implementation of Smalltalk.
So those communities getting OLPC may see magazines with smalltalk listings, instead of BASIC.
I also "grew up" on C64 BASIC V2 and although it was fun at first, one of the best things about it was how badly it made me (and many others) want to move beyond the wretched thing. Smalltalk will certainly fare better.
Edlin?
Bloody luxury!
copy con filename
blah blah
^Z
Where did David Brin come into this? Brin is an excellent science fiction author, but he is not Dijkstra.
So... I win? ;)
"Infecting minds with my own memetic virus, one post at a time." Ultimape
sheesh yourself. the author is david brin. not likely he was on a deadline ...
Python sucks canal water through a straw. Indentation and line breaks do not good syntax make. It sucked in COBOL, and it sucks even more in Python because we should never have returned to that nonsense. Much maligned though it was, PASCAL really was one of the best languages for learning to code - it was wordy, yes, but at least there were never arguments over where to put the stupid curly brace (THEN went on the end of the line, BEGIN went on the start of a line), scoping was well defined (VAR meant variable, no VAR meant it wasn't), and it enforced strong data types from the get-go.
-- daecabhir (this mind intentionally left blank)
Here, here. People don't become great coders, electrical engineers or high-performance engine mechanics just because the tools that lead down those paths happen to be laying around during their youth. They do it because they enjoy it.
Like many professionals in my peer group (which likely includes many on
While BASIC might not be instantly and automatically available at power-on in today's home computing environment, there is a flipside. Young potential coders have the benefit of voluminous information available at their fingertips should they desire it, a benefit my peer group did not have. If we sought, for example, details on directly accessing the low or high order 8-bits of the Z80 index registers (IX/IY) and our manuals did not document such (in fact, they did not), our options were pretty much limited to (a) finding some obscure magazine article or (b) purchasing books/hardware manuals (likely only available mailorder) in hopes that they included more complete documentation. By analogy, today, if I want to learn how to control thread permissions in a java virtual machine, well
If a young programmer-to-be is genuinely interested and possesses the natural aptitude of the autodidact (which is precisely what we were in our youth), I suspect they will expend considerable effort figuring out what exactly is on their computer and how it all works. I know I certainly did, even in an Internetless world (outside of the distant rumblings in University labs).
the problem is not the BASIC is missing, but there is no reason to code anymore for them, they want to play games and there is a lot of games available.
in the old days not only we had BASIC, but eh, that's all we had to play with. that's why we played with it, we were force to it.
if the computer industry has changed, then the parents has to pick up the job. and force them to learn programming.
or buy them a 286 for his birthday, see what they will come up with.
for recent computers, I would suggest throwing them at irb (interactive ruby).
its easy and its shipped with ruby for all plateforms. you can start by helping them with math homeworks using irb instead of the calculator, the will quickly discover a whole new world.
good luck
No wonder you had problems, you don't just mistype characters you replace two characters with one (g=ch)!
Back in my day, all we had was garachters!
Of course, MSFT doesn't advertise this because they don't want you avoiding their horrifically-expensive (but very nice) Visual Studio suite.
Actually, do advertise it, and they even give away a very full-featured development environment, Visual C# Express Edition. It's a free download.
Um, yeah! CS is really applied mathematics. Sounded like you found a dept. doing the right thing. They were right, you were wrong. A CS program should be geared toward producing computer scientists--a breed of mathematician. You wanted to be a programmer. You were wasting their time and resources.
Think of it like a car. You're a mechanic. You work on cars all the time. How much math do you need? Not much, right?
Well, you're an auto-mechanic, not an auto-scientist. The guys who design cars, develop new types of engines, crunch all those numbers from the wind tunnel, you think those guys know some math?
I know this is super-redundant, has been posted in this thread many times, repeated in every thread about education and CS programs, etc., but apparently it bears repeating one more time.
Computer Science is not programming! If your highest ambition in life is to be an adequate programmer, do not waste the resources of your local CS department. They have better things to do. Yes, completing a CS degree might help you be a better programmer, but strangely, a computer science program might also try to teach you some science. Don't say you haven't been warned!
Here's where I earn my flame bait mod. All you whiney little programmers. Oh noes! Math is hard! Well, you don't need a chemistry degree to cook, yet I haven't run into any chefs bitching about how many calc classes they had to take. Wonder why that is.
Oh yeah! Cause despite the fact some understanding of the principals of chemistry might make you a better chef, most people that want to be chefs DONT FARKING SIGN UP FOR CHEMISTRY DEGREES! They go to chef school! So how about all the folks who want to be programmers, go to DeVry or Katherine Gibbs or where ever they teach what you want to learn. Leave the science programs for the folks with some interest in science.
And if a programmer happens to find himself in a science program, deal with it! Drop out, transfer, cheat, whatever. Just stop whining about it all day. It's getting to be re-god-damn-diculous.
I don't get it. Whenever I had an empty slot in my undergrad schedule, I took an extra math course. I ended up with enough math courses to get a second major on my degree. In fact, if memory serves I finished with more math credits than credits in my original intended major (chemistry). So I really don't relate to anyone moaning about how much calc they had to take.
And who's making you take these courses anyway? Has anyone been drafted in CS? Seriously, if you don't like, if it doesn't suit your interests, do something else! I don't spend my life complaining about how much I suck at the violin and how unfair all those music theory classes were. Cause I didn't choose to major in music!
So rather than continuing to annoy the world with how hard your CS program is, just quit and run home to your parents basement.
Meow.
You can download GWBASIC here: http://www.geocities.com/KindlyRat/GWBASIC.html I just tried it and it works. If you want to get the full window, type "screen 0"
Brin WTFA
>> 10 FOR X=0 TO 15
:P
If you want to see 15 pairs of tits, you better change that to a 16.. don't forget one will match the output to the screen color.
Considering it is tits, I think you could have PEEKed instead of just going poking. Sheesh, she if she ever shows them to YOU again
What about making a game like "The ESP Game" for programming? Get 2 or more programmers and create simple programs that increase in complexity. You get points the way real programmers earn money; programs that serve a purpose give you the most points. Use Python (which is teachable) and then Java (for those that have a certain number of points).
I realize that this method is highly flawed, but why throw away ESP's addictive paradigm?
Learning about pointer arithmetic, assembly language, and how to build an ALU out of transistors will help me eliminate space leaks in my Haskell programs? Fantastic!
I don't have kids yet, but when I do, I'm going to set up an IBM AT [or something modern behaving as one] and install all the old games like Tetris, Styxx, Alley Cat, and Ports of Call (probably MAME too, along the way).
Those games are good *enough* for kids (for me, too), and they will get kids interested in games -- humble games, games they have a fair chance of actually replicating on their own.
Then, they will be interested in trying to make their own, and they'll get HyperCard or Pascal or Python or Java or whatever (I don't want to start a bashfest here).
"Good news, everyone!"
Back in my day, all we had was garachters!
You LUCKY barstards. We didn't evn have garachters.
I grew up in the 60's and 70's. To the best of my knowledge, no form of PC existed at that time.
I recall there was a CS class in my High School (I believe it was only open to Seniors), but you had to be a math geek to get in. I disliked math (still do) and CS was completely foreign to me at the time. Computers didn't capture my attention until 1983, when I got into the Travel Industry and learned Sabre. That's what first turned me on to computer technology.
11 years later, I got my first PC.
But I digress...
I guess that golden age of oppertunity for the "Johnnys" of the world came and went in the 80's and early 90's.
Scott
©20014 angrykeyboarder & Elmer Fudd. All Wights Wesewved
Arguments from authority underwhelm me. "The author is ..." is an example of one of those "arguments from authority." Google "carl sagan baloney detector" for more info. Here, I'll save you the trouble: http://www.xenu.net/archive/baloney_detection.html .
Don't accept this thesis because its from Sagan, but because it makes sense ...
Several readers have already commented on some things that made programming natural for us in the olden days of yore.
_ Users_Manual_(1977)(David_Lien)(pdf).zip
As for point 5 in the parent post, he's (she's?) right find documentation written for beginning programmers.
The Level I Users Manual by David Lien (1977) has been considered the gold standard in teaching beginners how to program. You have simply got to read it to appreciate it (putting it in the context of small machines).
http://www.trs-80.com/trs80-hw.htm
http://www.trs-80.com/cgi-bin/linkmehw.pl?Level_1
Several colleges made their comp sci students buy this book, to show them how to write manuals, years later....
I used this thing when I was 10 and very quickly learned computing and programming without any other outside help.
Computers were simpler back then. Kids' expectations for computers were, too.... So was documentation.
David Lien did an incredible job with this book and I don't believe his craft has ever been duplicated.
This file is only accessible from links on www.trs-80.com pages.
If you are trying to download this file from a site other than www.trs-80.com, it will not work.
If you were on a site other than www.trs-80.com, please email the webmaster to let him know which web site you were on when you got this error.
If you were on www.trs-80.com and you get this message it is because your Internet Security/Privacy Settings (under your control panel) are set too high. If you lower the security settings, the problem will absolutely go away, and you will be able to download. If you are running a firewall, you will need to grant full access to www.trs-80.com
This is not a server side issue, so please do not email the webmaster about it.
In my ComSci data structures course in 1988, my instructor told us that with computers getting ever-faster and more advanced, there's no reason to be efficient. Now, a fast personal computer in those days ran at like 20 Mhz and had 1 Meg of RAM and a 60 Meg harddrive.
As the computers get faster, we just do more with them. I agree with you that understanding the basics underlying the technology is only necessary as you get better.
But understanding how say C# compiles down into assembler, and what the heap and the stack means, can aid you in understanding the performance implications resulting from unnecessary boxing/unboxing of objects. Just as an example.
You had lowercase letters, too. here is how you turn on lowercase/graphics.
Man, you really need that seminar!
and they will expect you to support it. Microsoft won't want to include it, because people will expect support. As someone who's fielded helpdesk calls about mspaint, I speak from experience.
Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
The Computer History Museum has a piece (maintenance console, IIRC) of an IBM 7030 STRETCH mainframe-supercomputer. On the front side, you can see the University of Utah property sticker.
The clearance system sounds logical. It is not. It is completely arbitrary. -- John Bolton
Checkout http://phrogram.com/ Any kid or adult can program in Phrogram, it's super easy... And it's .NET based, so the learner can pick up the basics of the framework. Includes lots of examples, too.
And yeah, I too miss Commadore -- learned on a Vic-20 myself :-)
Interesting. If OLPC includes Squeak, won't that also mean increased popularity for Croquet, that 3D environment project?
I'd be happy to see wider use of Python (and Pygame) by kids, as I've found it easy to learn and use. One thing Python needs for beginners on Windows, though, is an obvious link to IDLE (the IDE). Currently it's buried in a subdirectory, so a newbie won't quite know how to open the editor and start saving/running programs, seeing error feedback, using the console, etc..
Revive the Constitution.
First of all, you can scrap languages like Haskell and java altogether if you want. Throw something like Ruby or Python at them. You can write programs that are just about as imperative, and with as little boiler plate in them as you can in Basic. This alone shows that you have no idea what you're talking about.
Second, you totally overestimate just how much people have to actually know about stuff to use it. You think people have to know about the lambda calculus to write simple programs in Haskell? You're out of your fucking mind. You also list the FFI. You only have to investigate that if you're writing Haskell code that interfaces with another language! Let's have a point-by-point look.
It's a named block of code that you can reference elsewhere, kind of like PRINT in Basic, only in Haskell, you can write your own.
Totally irrelevant. This is like saying you can't learn Basic without understanding Turing machines.
Basically irrelevant again. Also, currying primarily seems to confuse people coming from other languages who want to write all their functions like this(a,b,c)
You don't need to use higher order functions to write simple programs. However, the only reason I can see this being terribly confusing is if the child has already been indoctrinated by other languages where this is specifically not possible.
It is, again, quite possible to write simple programs without engaging in all the advanced features of the language, so your point falls very flat here.
Garbage collection is a feature that means they will never have to think about memory management (for small programs), just like in Basic.
It's very unnecessary to understand what monads are in an abstract sense to actually use them. Tell me, how does knowing what monads are help you interpret this code:
do a
Boy. That's impossible to read without understanding category theory!
The point at which they start needing to know what monads are is the point at which they'd be writing fucked-up spaghetti in Basic. Might as well have them learn good technique.
It's also interesting you should point this out. I seem to recall someone in #haskell saying that they did, in fact, teach some Haskell to a grade school class, including some stuff about monads. It seems that kids are smarter than you (or at least, than you give them credit for).
If we eliminated higher-order functions earlier, this is irrelevant. Otherwise, all they need to know is that if they create a function somewhere, it can use local identifiers. They don't need to know what closures are in general.
Really? They need to know that term, and about optimization in a compiler?
It seems to me that Sussman does a pretty good job explaining the difference between tail-recursion and non tail-recursion in lecture 1b here, all within his substitution model of computing. You could do the same with Haskell. You don't think kids would understand the idea of a function call replacing the name with the content of the function? Kids must be dumb.
Recursion isn't hard, any more than loops are hard.
Straight from the horse's ass.
What does learning about the underlying system help with in programming?
Architecting beautiful code? Nope.
Err... yes. Only by understanding the underlying system can you appreciate the reasons why a good architecture is a good architecture. Understanding what you're doing at a low level is a key part of building the aesthetic sense that guides us through high-level design decisions.
Learning powerful, high-level abstractions? Nope.
Most of those abstractions are substantially easier to understand if you can appreciate why they work. Take a look at The Old New Thing, Raymond Chen's blog. He periodically picks a question that a programmer has asked on a newsgroup and explains how you could work out the answer to it from first principles, just by working out how the abstractions you're using work at a low level. The point is: the abstractions have been designed to be efficiently implementable at a low level. This means that understanding the low level helps you understand them.
Programming efficiently to the hardware.
Is sometimes necessary. Computers may be getting faster and faster (but note that a 3.2GHz machine doesn't outperform my current 400MHz machine by a factor of 8 like it sounds like it should... there are other factors to the speed that aren't growing at anything like the speed of the processors: current RAM is only 3 times faster than it was when my machine was built, for instance), but the applications we're putting them to are getting harder and harder. Coding to that edge will always be necessary. Embedded systems usually only have *just enough* power to do the task they're designed for. Squeezing an extra few transactions per second from a machine could save a big web site thousands in additional hardware. People still want their video encodes to finish quicker. And faster cryptography means we can use better cryptography with bigger keys, which will always be desirable.
Look, I may be sitting here on a break from writing a highly abstract web application framework in an inefficient interpreted language and using an SQL database for storage when a custom file format might well deliver better performance, but in the end that's because I know it's more important to get this job finished quickly and with easily maintainable code at the end of the day than a high performance solution. But that doesn't mean I don't understand there are situations when high performance is desirable.
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.
/., but there's a whole world of jobs out there that don't require coding. "Johnny can't code" is a lot more like "Johnny can't synthesize chiral selective catalysts"*, than it is like "Johnny can't read".
Good words. I know this is
*OK, that one's probably too specialized, but I didn't want to re-use "rebuild carburetors".
...the future crusty old bastards are already drinking the Kool-Aid.
Wasn't that called an Acorn computer running RISC OS?
There is always Pygame.
I've got Python Programming for the Absolute Beginner, and it's entirely game/fun little program focused. The book comes with a CD with Python, Pygame and LIveWires on it, for those who don't already have them installed.
Other than the whole "practical applications" thing, you mean, right?
I'm being facetious, of course, but when it comes to community support, breadth of libraries, and--I suspect very importantly--ease of use, it's hard to argue that Smalltalk has any of those things compared to Ruby. It's stayed in the academic/research world without ever really moving to the commercial or hobbyist side of the fence. There are many "research project" environments that have eloquent defenders who make great cases for their design and productivity benefits--Plan 9, anyone?--but the barrier for widespread adoption is too high, and the people in the community by and large don't consider "lowering barriers to widespread adoption" a problem worth spending time on. (Squeak may theoretically be an exception, but in practice, it hasn't quite been setting the world on fire.)
As a friend of mine who worked with Alan Kay briefly in a past job said, "Smalltalk is the language of the future--and always will be."
Ah, but I didn't have a PET; I had a TRS-80. If you wanted lower case on a TRS-80 you had to solder a new PROM piggy-back on the existing character PROM, and install a toggle switch to select between lower case and graphics as lower case took the place of the graphics characters. Not quite as simple as sending a control code! :)
-- Conserve binary trees; recycle your email. --
Well, Smalltalk doesn't have the hype- and at its age, it never will regain it. But, it does have a lot of the same library support than Ruby and Python have- Smalltalk isn't just used by some AI researchers. I imagine that the Squeak community is comparable to the Ruby community, and both are smaller than the Python and Perl communities. Smalltalk is quite useful outside acedemic settings- with the web toolkit Seaside and either support for an RDBMS like MySQL or PostgreSQL or an object database like Magma or GOODS, it had a lot of the features of Ruby on Rails before Rails was a twinkle in some Ruby coder's eye.
I'm not saying that Smalltalk is on the fast track to taking over the world, but there is a lot of misconception floating around... it isn't just some language for acdemics and has a lot in the way of practical application. Lots of libraries- native widget support through wxWidgets, database support, etc.
Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
Why do you post as an anonymous coward?
Ruby and Python are just as complex as Java. Don't be fooled by the fact that you can start the Ruby interpreter and type 'print 1 + 2' and it will be evaluated. If you want to properly code with Ruby and Python, same comments apply as in Java.
As for the rest of your point:
1) you mention the definition of a function. Despite being wrong, I did not ask you tell me what a function is. I said that the newbie has to organize his code with functions because that what is the language that enforces on him.
2) you need to know what lambda calculus is, in order to use monads. And without monads, you can not write an interesting program in Haskell.
3) currying is a consequence of lambda calculus.
4) there is no program that does not use the 'primitives' map, filter, fold, etc. Therefore you have to learn what it means for functions to be first-class entities.
5) 6) nope. If you want to use trees, for example (very common in games), you have to use logical types, because a tree is defined as (left right value) | nil. Even if you use a simple enumeration, you have to use logical types.
7) but you have to know that is there, because of resource management. Whereas in Basic you have to 'close' what you 'open'.
8) But every time you need to assign a variable, you need to wrap the destructive update into a monad. It is not that trivial. Actually, it is very difficult.
As for the comment that children are smarter than me, well, what can I say...
9) oh yes they do need to know what closures are. Closures are a basic element of functional programming. Without closures, many things can not be achieved.
10) tail call optimization is important because it is the only way to convert a recursive loop to a for loop. So they need to know that the code does not actually return from a tail call, and adjust their code in a similar manner.
11) but recursion has some interesting properties that loops don't have. Loops are easier, because in recursion a new context is created for each iteration. We are all used to do things repeatedly, but we don't go back to the previous job after we finish the current one.
12) if you want to use a specific library not ported to your language, you have to know the FFI.
13) you have to know the module system in order to use the available libraries. For example, in Java, you have to know that the package name is the directory structure up to the project's root directory.
14) I am not saying kids can't know what a list is...all I am saying is that they need to grasp the meaning of a list in the context of a programming language. There are constraints: you can't get to the last element before processing the one before that, access is not O(1) etc
15) not really. Nil is a logical type. See the confusion? even you did not get that right.
16) Well, when the type checker rejects their perfectly valid program, then they would have to dig deep in order to know what happens. Even FP researchers claim that they are confused by the error reports.
17) but not all languages support the mainstream operator precedence. In Smalltalk, for example, there is no operator precedence, and you must be aware of that.
18) they need to know about lazy evaluation because there are some nasty surprises there. Sometimes you think that a particular piece of code has been executed, but it has not.
So my list is not comical at all. It is a list of things one needs to know a few things about in order to use a programming language for tasks of average difficulty.
I agree with you that these languages catter for larger programs than Basic. I never said that Basic is better generally. All I am saying is that Basic is better for 'Johnny coding'.
I suppose the thing that makes HTML not a "worthy" successor to HyperCard is JavaScript opposed to HyperTalk. It's not that JavaScript is a worse language, but for beginners HyperTalk's syntax is easer to understand. Consider the comparision of "page(x).element(x).attrubute = foo" versus "put foo into the attribute of Element (x) of Page (x)". The former is easier to write, but the latter is easier for a beginner to read and comprehend. In fact, it almost makes comments unnecessary.
As a finished product, HTML and its various scripting components do everything HyperCard did and more, true, but that's not my point. My point was that HyperCard was a good candidate to introducing kids to the concept of programming. It was simple, it was cheap, and it rewarded the beginner with results at an early stage.
I think Revolution has solved most of the "worthy successor" criteria, the last being that it has to gain popularity. It would be wicked cool if Apple and other OEM's could preinstall it, but the fact that it has to be bought and that you have to find it and install it has to be overcome first. I may get this for my daughter, though. It may prove to be the "gateway drug" I've been looking for.
SuperCard is also promising, but limited to Mac OS 9 or Mac OS X. The starting price is also pretty steep, indicating that they're not trying to get hobbyists.
I agree totally. I didn't meant to imply for a second that coding efficiently wasn't important at all, merely that it's not as important as it used to be.
When you choose a language, platform or even algorithm you make a tradeoff between developer-efficiency and machine-efficiency. Back in the day when we has only a few K to play with, machine-efficiency was king - processors were slow, and you simply couldn't fit too much into the available memory to worry about getting too lost in the code.
These days OSs and apps routinely run to thousands or millions of lines of code, and machines are thousands of times faster than they were back then. Because of the increased size of the program, developer-efficiency (ie, making the code understandable, avoiding bad design and security holes) becomes more important than it used to be, and machine-efficiency (as in, squeezing every last clock-cycle out of the processor) necessarily becomes less important than it used to be.
Everything in moderation, including moderation itself
"Err... yes. Only by understanding the underlying system can you appreciate the reasons why a good architecture is a good architecture. Understanding what you're doing at a low level is a key part of building the aesthetic sense that guides us through high-level design decisions."
I'm not saying it can't help you understand it, only asking whether it's necessary to learn that part first (or even "early") on your career as a larval-stage programmer.
Paul Graham has famously indicated the connections between painting and hacking, but that doesn't mean I should have to learn painting before I can touch a computer.
Surely I'd be better learning the skills I need immediately, and picking up painting as I go. If I'm building a house, I'd view it as being more like "plumbing" than "foundations".
Sure, if I've go no idea about plumbing then learning as I go might occasionally necessitate redesigning a bit (or a lot) of a house. This will hurt the first time, but I'll be damn sure I know what I'm doing from then on. I'll also be able to build several really great garden sheds and really get interested in building before I encounter the boring world of plumbing.
I think this is a better way of learning than forcing everyone to learn plumbing before they're allowed to touch a brick - while you might get a few really nice houses built, you'll lose a generation of talented builders because they don't see why they should sit through a year of plumbing to pick up their first trowel...
"Most of those abstractions are substantially easier to understand if you can appreciate why they work... The point is: the abstractions have been designed to be efficiently implementable at a low level. This means that understanding the low level helps you understand them."
Actually, the best abstractions have been designed for their use as abstractions - thinking tools. Look at Lisp compared to FORTRAN. FORTRAN was designed to be close to the hardware, and was very efficient. Back in the day everyone used FORTRAN for everything.
Lisp was designed to be expressive. When it was first written it was slow to run, but now Lisp programs run acceptably fast, which language is widely regarded with nit-picking disgust, and which language is undergoing a revival amongst the very best and brightest hackers?
(FWIW, I don't know FORTRAN or Lisp, so I have no axe to grind on this. But I'd say the usage-patterns are very, very clear).
Regarding your assertion that abstractions are chosen because they map well to the hardware: How do "linked lists" help you understand processor design? "Binary", granted, is useful at the low level, as are pointers (but does any modern language have true pointers, or references?). Arrays are useful, but they're less "abstract" than things like hashtables or linked lists, and how does OOP map neatly onto tranditional assembler programming?
Most of the "best" abstractions (inheritance, linked lists, OOP, APIs) are more about giving you useful tools to think with rather than just "mapping to the hardware". When you think about it, an abstraction that's designed to map to the hardware isn't really that much of an abstraction at all, is it?
"[Coding efficienctly is] sometimes necessary... Coding to that edge will always be necessary. Embedded systems usually only have *just enough* power to do the task they're designed for. Squeezing an extra few transactions per second from a machine could save a big web site thousands in additional hardware. People still want their video encodes to finish quicker. And faster cryptography means we can use better cryptography with bigger keys, which will always be desirable."
I don't believe I ever stated anywhere that it was never important. In fact, on several posts on the topic I've specifically mentioned embedded programming as one example of a place where a low-level appreciation (even "using assembly") was more or less essential.
Everything in moderation, including moderation itself
That's a big reason I decided to go with Commodore instead of TRS-80. All caps make my eyes hurt. The joysticks were irritating to me, even though the idea of analog position-sensing input devices is cool.
Man, you really need that seminar!
That is no longer the case. Those people are still around and in great numbers, as evidenced by the sophisticated IDEs being developed. There is also a new guard that uses the IDEs and doesn't code by hand. They are not taking the place of coders, but rather they are an addition to the family made possible by the coders who worked before them, and now with them.
There is also a group of developers who use WYSYWIG apps to create their apps and web pages. These apps were created by programmers in IDEs created by coders. There are now graphic artists who can create on a computer due to the fact that coders created IDEs for developers to create graphics apps in so that these artist could work on what they do best without having to learn someone elses job in order to do theirs.
And their are the end users who use these apps, and art, and web sites to enhance their everyday life. Should they learn to program just to be able play Quake, or email their grandchildren, or write their novel? no.
All of this and more has built on top of, but has not taken the place of, the original computer programmer. Without these many layers, the computer would remain what these old farts apparently wish that it still was, an unapproachable toy for the technological elite. They used to feel special and they could look down on those who couldn't do what they do. Now that is threatened, and like republicans scurrying to grab on to the last vestiges of the 1950s, they are fighting the inevitable and healthy change that happens in any society.
Good night, and Good Luck.
Agreed...having learned programming as an adult (Java, Perl, etc.), I have a different perspective, but draw the same conclusion. If you don't learn the anatomy of programming in a simple way, it's going to be a lot harder to learn. To learn to speak Spanish, you don't start with a dicsussion about architectural engineering in Barcelona.
I think you've got the wrong analogy. Something along the lines of "learning some programming is to being a programmer as fixing up the family car with your Dad is to being an expert mechanic." It's not so much the expectation that these kids will all run off and take up the programming as a career, but having it accessible and easy to try out might just mean that a larger number who might never have given it a shot discover the same love for it that I did. I think that's a good thing.
I love the fact that anyone involved in the creation of software or technology feels passionate enough to comment on a simplistically complicated question about the future of humans performing programming activities.
Thank you all for the good read.