“For three years [my] son Ben, and I have engaged in a quixotic but determined quest: We’ve searched for a simple and straightforward way to get the introductory programming language BASIC to run on either my Mac or my PC. Why on Earth would we want to do that, in an era of glossy animation-rendering engines, game-design ogres and sophisticated avatar worlds? Because if you want to give young students a grounding in how computers actually work, there’s still nothing better than a little experience at line-by-line programming.” Looking beyond the immediate fear-inducing acronym BASIC, this article delves deeply into what it means to simply be in control–via a basic understanding of under the hood–of your own computer, and how our whiz-bang world of technology today is failing to bestow this understanding on this generation of would-be hackers.
How did you become a programmer? Was it not through experiences of ’60s, ’70s or 80’s computing? BASIC is at the heart of what makes me a programmer. The article correctly argues that the fact that BASIC is a bad programming language is besides the point–it got things done in few enough lines to incite the imagination and sense of awe in my young self. I could move dots around the screen and I could create in a messy ‘finger-paints’ hands-on way that rewarded exploration and play. Children do not start with C and progress to C++ no more than I professional code in Q-BASIC.
How many lines of Java code, and more importantly how much background knowledge, would you need to know to synthesize a basic musical tune? In certain BASICS, nothing more than a line or two. I am unaware of any simple way to get a computer to do anything anymore. Everything requires background knowledge, and over complicated tools built for solving big, business-y type problems and not for letting users simply play and create with their computers. Computing today is awesome (and I mean that dictionarily) for consuming content, but absolutely crappy for creative children who want to create—or more precisely, want to learn how to create.
Yes, I’m sure you can give me great examples, but they are not the norm, nor the default, nor the expected. When I switched on my C64, it stated “Ready.” and it was ready to go do whatever I commanded it. By default, I could create, or consume. When you have to pay $99 a year to create for your own iPhone, there is no point you can put to me against this stymieing innovation. If my Commodore 64 required £99 a year to program on, I wouldn’t be a programmer, period. I was 7 for goodness sake, and only stopped using it when I was 16 when I still wouldn’t have been able to afford it.
When my teachers showed me parabolas for the first time, I drew them on my C64 when I got home. Something that was not possible to do for a 12 year old on any of the PCs in the school. They didn’t have the software, you couldn’t download and install it, and there was no way to otherwise command the PC in a basic way to do something as simple as answer a child’s curiosity. I played with the parameters and then started mapping 3D parabolas, all on my own. Nobody taught me how to do this. I was entirely self-taught on the C64, in my own time, and I was drawing 3D parabolas using BASIC. A 1983 Commodore 64 was more capable in that aspect than computers three hundred times the speed and capability.
The article finds the same conclusion: nothing on the PC actually worked—
Chipmunk Basic for the Macintosh actually started right up and let us have a little clean, algorithmic fun. Extremely limited, but helpful. All of the others, every last one of them, was either too high-level (missing the whole point!) or else far, far too onerous to figure out or use. [,]
Until, at last, Ben himself came up with a solution. An elegant solution of startling simplicity. Essentially: If you can’t beat ’em, join ’em. [,]
While trawling through eBay, one day, he came across listings for archaic 1980s-era computers like the Apple II. [,] “Well, look, Dad. Have you seen what it costs to buy one of those old Apples online, in its original box? Hey, what could we do with it?”
However, one of the reasons I wanted to take up this article was because whilst the author laments the lack of movement from Microsoft in providing an answer for kids,
All right, here’s a challenge. Get past all the rationalizations. (Because that is what they are.) It would be trivial for Microsoft to provide a version of BASIC that kids could use, whenever they wanted, to type in all those textbook examples. Maybe with some cool tutorial suites to guide them along, plus samples of higher-order tools. It would take up a scintilla of disk space and maybe even encourage many of them to move on up. To (for example) Visual Basic!
,Microsoft have in fact done this very thing! Microsoft Small Basic is a simple language and development centre to teach BASIC programming skills. The language has just 14 keywords and it is based around .NET.
(I’ll leave criticism of Small Basic to the actual users, but I have to question the use of the floppy disk icon for save. Do kids even know what a floppy disk is?)
As you can no doubt guess, this all matters a lot to me. Free, unfettered and unpatronising access to my own hardware made me what I am today. Where will the next generation of Linux kernel hackers come from if there are not kids without an interest in what goes on under the hood? Where is any innovation going to come from when we all retire, and the only way to create is to go through an approved channel of education into the right job that pays for your tools and for your training so that you may be blessed to look under the hood? Okay, so I’m being a bit dramatic, but I’m genuinely worried with what Apple is doing, and where computers are going, given that the industry’s future in 30 years time is being progressively constricted by companies that want to keep their comfortable positions now that they’ve gotten there on the backs of the exact opposite behaviour—free and unfettered access for our generation to explore and create and to become the makers of this world.
But ah, we still have the ’Web! What was so special about my Commodore 64 was that when I turned it on, the only thing the best programmer in the best company had over me was education and experience. He couldn’t have a better Commodore 64 than me. I could take that company on head to head if I had the right idea and the will power—and many did, considering how many large game companies we have now sprung up out of bedroom coders.
The ’Web allows anybody with a computer, Internet connection and a text editor to take on the biggest companies at their own game. The best web developers in the best companies have better educations and better pay-cheques than me and yet I can innovate more than them from the comfort of my bedroom.
Here’s to BASIC! And here’s to the next generation of programmers, whatever language you code in!
Yes, I also learned programming using BASIC when I was 11 years old or something around that age.
It’s really made for beginners, nothing beats
PRINT “hello world”
and I learned my girlfriend basic programming before she learned a bit of C++.
The great thing about FreeBASIC is that it can do simple things, run QuickBasic programs, and also supports (limited) OOP and pointers, and C(++) libraries, so it can be used from simple things up to bigger projects.
http://en.wikipedia.org/wiki/FreeBASIC
http://www.freebasic.net/
I think many of us started that way. I’m still trying to recover, over 2 decades later.
Yes. But the problem arises when you start with BASIC because it’s fun and simple and next thing you know, it has shaped the way you think about programming.
BASIC is not bad because it’s not as “fancy” as C or Java. It’s bad because it’s a dead-end, a destroyer of mind flexibility. C or Java have their redeeming qualities because they allow and even require the mind to work in other ways too. BASIC has none of those qualities. It is a stupid, mean, mind-grinding machine.
Edsger Dijkstra said this about BASIC:
A programmer who started with BASIC or other mainly-imperative or procedural approach with low entry level (I’m looking at you, PHP) will have a terrible time trying to understand declarative programming (SQL or functional programming), pointers, recursivity or OOP (which are all supposed to be fundamental to decent programming).
That person is locked into thinking like the lowest form of dumb machine there is: one single instruction at a time. These examples I’ve given require such a person to take their mind out, rinse it and turn it inside out, so to speak. It’s a terrible effort; many of them fail and for many of them it takes years and years to accomplish that. That’s because they should have started flexing their mind right from the start, and instead they were dumbed down with BASIC. Perhaps you can now understand why Dijkstra calls this “criminal”.
The context of that quote is much larger, and that entire paper is worth a read:
http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD898.ht…
If you read it you will see that he warns about larger issues, of which this BASIC thing is just one symptom. There’s an entire unhealthy current in today’s society that tends to regard computers as magic machines, expect them to do what they cannot, blindly trust them for all the wrong things, or, worst of all, trying to emulate their inner working in the human mind, when the exact opposite should be true.
Computers are dumb tools meant for specific tasks. Once you’ve learned how to use a hammer you use it when you have nails to hammer and that’s it. But when it comes to computers and things like BASIC we basically have lots of people who try to be a hammer and bang their heads on nails. It’s a horrifyingly wrong and dangerous way of non-thinking.
Low-level languages have their place, sure. At some point in computing history they were the only way to do things, sure. But technology has evolved. We don’t use rocks and live in caves anymore, we have specialised tools. And imperative programming languages should be just one tool among many, not the start and end of it all. In no way should any person should be subjected to the horror of breaking their mind to only think like a computer, one instruction at a time. The human mind is capable of much, much more.
If you want to teach your kid programming, for the love of God, please, start with a balanced combination of several approaches:
http://en.wikipedia.org/wiki/Educational_programming_language#Child…
Off the top of my head, I’d go with Alice or Lego Mindstorms, Logo and then BASIC. But under no circumstances start with BASIC or let them learn only BASIC. Carrots are good but you wouldn’t feed your kid only carrots or wean him on carrots, would you?
Edited 2010-06-22 11:01 UTC
“A programmer who started with BASIC or other mainly-imperative or procedural approach with low entry level (I’m looking at you, PHP) will have a terrible time trying to understand declarative programming (SQL or functional programming), pointers, recursivity or OOP (which are all supposed to be fundamental to decent programming). ”
I learnt to code in BBC Basic, then ZX Basic and QL SuperBASIC. I had absolutely no issues learning SQL, nor OOP for that matter:
I am a certified SQL Server 2005 technology specialist and MySQL 5.0 Certified Developer. And I have used Access SQL for too many years to remember. I also know my way around Oracle SQL (including PL/SQL), OpenBase, SQLBase, SQLite etc
As for OOP, my first OOP language was Smalltalk (under OS/2). About as OOP as you can get. I wrote financial transaction systems for a major European investment bank back in the ’90s with it – took me about 2 weeks to ‘get it’. Not that bad, given that there was no Web to speak of to look things up back then, and precious few books.
Nowadays I mainly code in PHP 5 with Zend Framework.
I’m not saying that BASIC is the greatest first language (although modern BASICs are fine and do OOP, recursion etc with no problems), and I tend to agree with you about Logo being more suitable for young kids (my daughters can write Logo programs, and are not even aware that they are programming). It’s just that statements like the above are too general in nature and tend to come from people brought up on a diet of C and other low level languages.
Yes, *some* people who learn BASIC may have issue with OOP, but I suspect that most people have problems with OOP when they first encounter it anyway. When you get it though, it’s like learning to ride a bike – it’s easy thereon in.
I suspect that the main block to people learning new technologies/methodologies is jargon, poor teaching/books and lack of time!
Sadly I have to agree with this completely. I cut my teeth on BASIC and then Pascal and coming to terms with OOP was, and to some degree still is brain-draining. While I loved those times of tinkering with the learning languages, they were counterproductive in the long term I feel.
Unfortunately there wasn’t much else around on mainstream desktop systems back then – Sinclair Spectrum, Apple ][ and /// series (including GS), original IBM PC and the clones, TRS-80, BBC, Commodore machines, they all had BASIC “built-in”, and languages like Pascal and Fortran were readily available for most, so that’s where we started. I regularly find myself cursing those “fun times” as I try to wrap my ageing grey matter around some modern code snippet, only to end up taking a handful of Paracetamol and Skyping a friend for an explanation…
I think people need to stop blaming the language and perhaps consider that they’ve run up against some limitations in their own cognitive abilities.
I kind of have to agree with this. My guess is that 95% of people just could never be programmers. And that is not a bad thing. 95% of programmers could never write novels, or be car mechanics, or teachers, or doctors.
Each person’s mind works in different ways. Personally, I think I was lucky enough to have the sort of mind that understands programming very easily. I started with Logo, then BASIC, then Java, then C++, and now Haskell, and I’ve never had any trouble with the new concepts (except maybe monads… that took a few weeks). But I could probably never do any of those other things.
And I’d agree with that as well. I’ve always been fascinated with technology, but spent a lot of time in the arts rather than the sciences because I felt a lot more driven by intuition and emotion than I did by sequence and logic.
I learned a few languages or so, maybe half dozen at most, either on my own or through my schooling, and I studied programming/coding methods and concepts. But I never felt that I had the patience or diligence to do such things for hours and hours.
I’ve always felt much more affinity for the hardware side than the software side. If circumstances had gone differently, I might have gone deep into the music applications: acoustics, sound engineering, etc. My other hobby *was* home sound systems, after all.
As generic advice it’s probably a good one. People should be aware of their limitations and make the best of what they’re good at.
If you meant it as defence for BASIC, not so much. Because it’s been criticised by people who aren’t exactly dumb. Dijkstra wasn’t taking it out on BASIC because he wasn’t capable of programming in it. He was condemning it for what it is: a completely unnatural way of thinking, blindly borrowed by humans from computers, instead of the opposite.
LOL. BASIC is a simple language to introduce computer programming and do some basic work in a dozen of lines. Anyone who expect OOP or some high-end functionality from BASIC is completely missing the point.
I started from ZX Basic, BTW. And I completely agree with author’s point.
While your criticisms of BASIC are not unfounded (and I did not start on it myself) I don’t think the author of the article is wrong, either. BASIC serves an important role in teaching programming: it reaches out to people who might otherwise not begin to program.
Where BASIC serves is as a gateway drug. To give the novice a taste of power and to drive his maniacal impulses. Once hooked it is possible to wean someone away from BASIC and on to harder drugs^H^H^H^H^Hlanguages, like LISP.
The low barrier to entry is precisely BASIC’s virtue and its broken-ness is directly related to this simplistic virtue. Any other language would serve as well if it could be as simple, but if it could then I think it would likely to be as broken.
I couldn’t disagree more. The thing is, most people are bad programmers. Even those doing it for a living. Great programmers are, above all, great architects, being able to have both a highlevel view and drill down to the core. BASIC is so simple, everyone can do it. Everyone understands it, as it is the closest thing to giving the computer instructions the way you give instructions in real life to people. This means that really bad programmers (or must I say, people who are really bad at programming and will never become “true programmers”) can do BASIC, and nothing more. Sure, you can teach them C, but they’ll turn it in a nightmare spaghetti dish C has become infamous for. So although it may seem that teaching someone BASIC destroys his chances of ever grasping anything else, that’s just statistics, not fact. In reality, people who are born with the ability to become good programmers will be good programmers, even if they are taught BASIC (or worse, assembly!) first. I know many of them who started with line-oriented BASIC, then went to procedural BASIC, and from there to Pascal, C, C++/C#/Java whatever. The mind is really flexible, a single bad (or rather, limited) experience doesn’t prevent its expression.
When’s the last time you spoon-fed a real person step-by-step instructions? You tell them “go to the store and pick up some eggs” (perfect example of declarative programming, by the way). Even if they’d never been to that store, it’s easy, as far as instructions go. Because most humans are not as dumb as computers.
To a computer you’d have to tell in painstaking detail how to reach the store, work the main door, pick a basket, work the turnstile, recognize the eggs, pick up the eggs, read the price label, check out, verify payment, return home.
And that’s exactly the problem with BASIC. It’s a fundamental fallacy that because computers work like that (them being dumb pieces of metal) we, humans, should also think like that. That’s NOT how the human mind works. ANY programming paradigm other than imperative is much closer to the way humans think: declarative, functional, OOP.
So why did we settle on step-by-step as the best way to approach programming? Because at some point in time that’s all we had: early programming “languages” were very rudimentary. But that’s not the case anymore!
You could also argue that even people who suffered massive physical or psychological trauma as children have a chance of leading functional lives later on. Doesn’t mean the trauma was a good thing. Their lives would have been so much better without it.
Yesterday. I have kids, you see.
Well, if they’re not familiar with the details, I’d also tell them which store to go to, what shelves to find the eggs, what eggs I want (eko, 4-corn; small, medium, large; chicken, quail; white, brown) and what the maximum price is that I want to pay for them. I may also tell them to get the car or go by bike, of that’s faster.
I’m not sure what you’re arguing here. Do you imply that when programming in C or Java, your computer instantly gets smarter, and understands more? The downside of standard BASIC is the limited possibilities of procedural programming and extendability in general, but it works pretty much like C or Java. In fact, it is more like your ideal, as in BASIC I can say “draw circle” or “play music” and it works like a charm. In C or Java I have to code all that (or include libraries, that usually make me “intialize” them and set all kinds of parameters and so on).
Nobody is claiming humans should think like computers, you are putting up strawmen here.
Really? I always liked to think that “draw circle” is much more intuitive than, say “circle.draw”, since in real life, the circle doesn’t draw itself. And I must be very unhuman for not being able to grasp functional programming, since hey, that’s supposedly how my mind works. Well, it doesn’t.
Yes, you could argue that, but that’s not what we’re arguing about here, again putting up strawmen. I am arguing against the notion that using BASIC as a first programming language would “damage the brain” or whatever wording the OP used. I am not arguing in favour of the notion that BASIC should be taught as first language, which is what you seem to imply.
I dunno. But I hardly remember any BASIC from when I started programming (which was just 10-12 or so years ago). I am not saying it’s a good language, but comparing this to real traumata seems exaggerated to me. And I’d say I am not that bad of a C++-, C#- (and some more) programmer (some of my projects include picogen (http://picogen.org) and metatrace, a C++ compile time ray tracer (http://gitorious.org/metatrace#more)).
Or are you telling me next that I should visit a psychologist, so he pulls out this untreated soul wound, makes me whine and cry and lie in is arms at his hairy chest, so I can finally forget those abuses that I hardly remember?
Edited 2010-06-24 08:52 UTC
You claim “That person is locked into thinking like the lowest form of dumb machine there is: one single instruction at a time.”
And you think that’s a bad thing?
That’s what a computer DOES! And even when it doesn’t, the CPU goes to some effort to make it seem that instructions are happening sequentially.
Programmers who only learn Java or Haskell or Ocaml often end up creating software with awful performance and/or memory use. Worse, they don’t know why it sucks!
I’m not going to claim BASIC is a great programming language, but I don’t believe it’s harmful. It doesn’t stop people from learning declarative and functional techniques. After all, I learned both and I started with BASIC and 6502 assembly on a Vic20 and C-128.
Personally my experience programming (that I can remember) was writing Basic code which used a for loop with “poke” to blow out an apple IIe. I think we did some other small stuff.
IMHO programming in and of itself isnt’ such a big deal. The bigger deal is “logic”, being able to look at a problem and to be able to logically break it down into logical sub problems. Having exposure to these basic languages helps in that it removes all the distracting *crap* and reduces the problem solving to its elemental environment, sitting at a terminal and writing some code to solve a simple problem.
Apple and Microsoft has some issues. Their primary interest isnt’ in helping you solve your problem, it’s to make sure whatever you do you use their tools and their platform first and foremost. It’s kinda of bass ackwards.
Actually I think it can be useful to have people use more object oriented languages from the outset. It helps them think in objects like their mother tongue. I can’t tell you how much code I’ve worked with written by colleagues or my predecessors that isn’t really object oriented and they’ve clearly struggled to move from procedural to object oriented.
On another note, you could argue learning a functional language first may be a good idea as well from the outset as the expressive power could be liberating and might more suit what the young programmer wants the program to do.
They’re all tools. One thing I have found is that each language has an archetype that causes it to fall apart if you use it in the wrong way.
PHP, no matter what it tries to change, or proclaim is not an object orientated language. Programming OOP in PHP just causes everything to become over-engineered, long-winded and hell to maintain, document and to learn. PHP is infinitely more compact, concise and elegant when you work procedurally. Honestly, the OOP drive in PHP is complete crap to please zealots.
Yet, in a language _conceived_ to be OOP from the start, like Ruby, writing procedurally is not the best way. It pays to embrace OOP and the most elegant code comes from that.
Starting out with learning OOP is neither the right way or the wrong way IMO—using half-arsed OOP (like PHP) is though.
Disagree with the particular examples used, but agree in general. Pascal, Basic, Fox Pro never should have been object orientated. And you shouldn’t use objects if they are available with those.
I actually think PHP 5 did a fine job with object orienting the language. The bitch of it all was the transition from the crappy PHP4 Objects to the better PHP5 objects. A lot of stuff still worked, but some of it didn’t. Didn’t really make a clean enough break. I think PHP 6 will really do it well. Wait a minute … Hmm.. it seems as if I’ve just proven your point. Well played, good sir. Well played.
Hi Kroc.
PHP is not a 100% OO language. Not everything is an object in PHP and there are still crappy-named functions.
However, PHP is still fine. You just have to forget about your old ways of php programming. If you use PHP 5.3 and still think and code like PHP 3, then sure, php is crappy.
The thing about php is, as soon as you close your php in 24 hours book, you can create a full-featured website. PHP is easy. people write crappy code with it.
But, forget about your old php3 habits and get a decent framework (like, http://yiiframework.com) and learn it. Then you will understand that there isnt really something big wrong with PHP. Its a fine language and its improving with a decent speed.
Also, for Thoms sake (i miss his articles, really) dont compare PHP to asp.net or RoR.
PHP is a language. Ruby is a language. ASP is a language.
PHP is not a framework. Rails is a framework. .Net is a framework.
if you want to compare, compare php + [a decent framework] against RoR and asp.net
I didn’t mention either, you’re imagining things. Nor did I mention PHP3 or frameworks.
I didnt say you did, I asked you NOT to. Because thats what people do.
Also, without a framework, you code will be crap. just like any other language.
you cannot create a nice application using pure c/c++ (without franeworks like gtk, Qt and others). why do you think its a good idea to write a web application in pure php?
You also dont create websites using pure Ruby, Python or ASP.
And tell me why on earth you need EVERYTHING to be an object when you are not going to use advanced API’s and libraries?
Edited 2010-06-21 21:59 UTC
I don’t feel like I’m part of this conversation õ_o
What a random reply…
And what makes object orientation the dog bollocks?
It’s useful where it is.
It’s a hiderence where it is not.
I know, you know what you know.
Think outside the box!
Error: ‘Box’ is an undefined object
Could someone please tell me what is it with this modern day fetish with object orientated programming being marketed as the be-all and end-all of programming paradigms? Don’t get me wrong, I’m sure it has its place but it is used and abused far too often by people who think that it is the silver bullet that’ll solve world hunger, poverty and bring about world peace.
I’m an old battle axe that started off with AmigaBASIC the moved onto AMOS, then dabbled on the school computer using BBC BASIC, then for shits and giggles I taught myself COBOL (long story), and now I am learning C. Every encounter I have had with OOP I keep asking myself why the hell is something being made more complex than it needs to be? The Java programming book I read made eternity in hell appear to be a nice get away. I dabbled in a bit of C# but the dabbling was little more than what I do today with little in the way of OOP being used.
Am I just out of touch or is OOP yet another over hyped technology peddled by small group hell bent on showing how smart they are by making something that should be simple as needlessly complex? I look through OOP code and it is like a spaghetti soup code equivalent of crap being flung against the wall. Of what benefit is it when code is so ugly, so disgustingly unreadable that maintenance is next to impossible?
I wished programmers out there stuck to the principles of good programming they learned university and when programming they stuck to the KISS principle. Maybe if that occurred then we wouldn’t see the millions of lines of unmaintainable code that ends up creeping into a large code base over many years resulting in software that turn into giant walking clusterf-cks.
OOP is definitely over-hyped. However, there is some merit to it.
The important thing to understand is that each language has a certain paradigm that it was designed for, even though you can program with almost any paradigm in almost any language.
For example, Java and C# are OOP languages. If you write Java and C# in a procedural way, you’re probably doing it wrong. On the other hand, doing OOP in C is really not useful. You really shouldn’t do imperative programming in Haskell.
Really, all the programming paradigms have their strengths and weaknesses. In my opinion, OOP is best for boring business-y things and GUIs. Procedural is best for low-level things like kernels. Functional is best for highly data-oriented problems like compilers and databases.
If people of my generation didn’t get OOP earlier is because of all the hype and the stupid lemmings and inheritance examples.
If OOP had been explained like it was conceived – as a way to separate parts of the program in a way that makes reuse and replacement easier, we would have got it a lot faster. It didn’t help that C++(which at the time allowed for nil reuse and focused on half-inheriting things from other things) was the poster child of the movement.
Encapsulation is the real deal, inheritance is a complement, by no means necessary, and most importantly, it certainly has nothing to do with lemmings.
The real damaging languages are the likes of Java which make understanding of the “primitive” ones completely impossible all while promoting dubious OOP practices.
On the OT, if I had been told to #import some stuff and type boilerplate code in order to print HELLO in an infinite loop, I wouldn’t be programming right now. BASIC, like machine code for the microcomputers of the time is simple enough to slide within a kid’s attention span. Vb did that for GUI apps.
It is amazing that some kids still learn to program with some hellish popular language, but I think it is clear that the success rate(defined as programmer-kids/computer-using-kids) was far higher back then.
Functional is the new OOP. It is an interesting paradigm to learn and apply, but how do they promote it? Stupid recursion examples that don’t make sense because they run infinitely slower than a sound algorithm, written in algebra-like languages where you are not allowed to do anything lest you unleash side-effects. The ultimate entertainment for children who like playing soccer without a ball.
Oh wait, reminded me of this!
http://dragon-tails.com/comics/archive.php?date=030118
Reminds me of a “feature” of a product from Digital Equipment Corporation around 1972. The GT40, a vector mode graphics system with a PDP-11 as it computer, had a “programmable fuse blow” function. Well, they figured out it was a “bug” but the fellow in the group that found the problem was quite impressed… Definitely “Goodbye World”.
Also reminds me of the “Printer on Fire” error message: http://en.wikipedia.org/wiki/Lp0_on_fire
edit: What you describe sounds similar to this: http://en.wikipedia.org/wiki/Halt_and_Catch_Fire (noticed at the bottom of the other wiki page).
Edited 2010-06-21 21:07 UTC
God, that was hilarious! I had a hard time not lauging out loud like crazy in the office.
I’ve always been of the view that Pascal is the superior “teaching” language compared to BASIC.
Or why not Python? It’s free, runs on pretty much everything, and has a basic-like syntax to it, and you can either code procedurally or use OOP if you want.
Note: I’m not a Python fanboy and don’t claim it to be the ‘end-all’ of languages, but seems like it would be a nice choice to start out on. Much more so than any language that forces you into OOP from the beginning, or one so complex that you have to study it for 6 months to do anything useful with it.
I wouldn’t say Python syntax is BASIC-like, but it *does* favour words over symbols, which would probably help someone to get into it. It also has lists and maps as native types, so there’s no need to drag in library functions too early. Supports classes for teaching OO, and a variety of constructs suitable for teaching functional programming. And has plenty of libraries available when they start looking at web stuff, or UI, or writing games.
All in all, I think Python would be one of the better choices for teaching programming to kids…
Yeah, that’s what I meant. To me, anything without curly braces or semi-colons is basic like
Python is not like other languages because of the indentation syntax no? Surely this does not lend itself to new programmers? I could be wrong though…
Much better for beginning programmers, so they don’t learn the bad practices of inconsistent indenting and spacing and overuse of syntax sugar.
It’s still possible to write illegible code in Python, jut harder (contrast with Perl).
Actually, Python was designed as a language to teach programming, and the indentation had exactly the goal of making it easier for new programmers. For example, in C you could write stuff like this:
if (some condition)
……..if (another condition)
…………….do_something(fancy);
else
……..this_sucks(badluck);
Obviously, the indentation of the “else” is wrong, and this is very hard to spot for new programmers. This wouldn’t happen in Python. Example adopted from here: http://www.secnetix.de/~olli/Python/block_indentation.hawk .
There are rules in C and there are rules in Python. Your example simply outlines the weakness of one language to advertise the other.
New programmers are supposed to follow the rules as strictly as possible and cut corners (elliminate the curly braces) only when they are comfortable and understand what they are doing.
If statement without braces is and exception to the rule and as a professional programmer, am avoiding it usually.
It also supports turtle graphics very well in the base install on just about any computer, which makes drawing very accessible. And if you create a program on a Mac at school, it’ll draw correctly on the PC at home.
And it’s free in both senses. And includes a good editor (Idle) to help get started.
Not perfect, but certainly an attractive candidate.
I’m a Python fan and I agree.
I would go so far as to claim that there is no programming language that is easier to learn to a level where you can do something interesting. Sill there is no limit to what you can do with it.
Kroc; You hinted at this quite heavily, but didn’t explicitly say it;
The important thing wasn’t that the language was available, even free. It was that it gave the impression of being an integral part of the computer. You can actually get some very good BASICs nowerdays. But they just seem like any other program.Surely the real programming bug was given to you by the thought that that’s what computer’s are for, for you to bend to your will.
Now, you load up BBC BASIC for Windows (or YAB or any other) and there’s no feeling of magic—no “I’m in absolute control of this machine” feeling. We’re taught in schools (I’m a 22 year old Briton, so I was at least) to regard PCs as glorified secretarial tools. If anything stymies interest in programming then its got to be that.
P.S. Oh, and now kids are also taught to regard computers as communication devices and big libraries. This only further removes the sense of creative potential.
Edited 2010-06-21 20:19 UTC
I was going to post something about how unix shell scripting does all the same good stuff…
until I got to the part about playing music, and manipulating dots on the screen.
I remember BASIC, but honestly never did anything cool with it. It was LOGO, which was graphical, and not nearly as powerful that really lit the fire in me.
I now have 6 kids of my own and NONE of them know as much about computers as I did at their ages. Its sad and I’d like to do something about it, but the problem is as much about connecting with them as it is teaching. Most of them are apathetic.
I think you hit the nail on the head there.
I think people program in “language” these days.
Real programmers can program in any language given the manual and a few hours.
Yes even Lisp/Forth etc.
They are all just tools to get things done, if you cannot adapt to a new syntax you aint a programmer.
We’re not talking about what Real Programmers can do.
All Real Programmers were, at one point, ignorant kids. We Real Programmers need to remember what it was like to be a ignorant kid trying to make a way into this big grown-up world of programming, and make sure we’re not making the learning curve too steep.
Second 100% of that.
I’m currently looking for another job and I just can’t believe how people put away my 12 years of experience in C++, my research years, my 6 years of teaching at the university. Most if not all of them are hypnotized by Java and say: “oh, you just have 2 years of experience in Java EE”…
I think to myself “hey stupid, Java and C++ are much alike! I left academia to work for a private company so why are you surprised at things that my résumé states clearly?”
I dare think, having recently returned to C++, that Java is a stripped-down, easier and more coherent version of C++. The rest is a question of being used to the libraries, which has nothing to do with the language.
How long does it take to know the syntax differences between Java and C++ as to control statement, class definitions, virtual functions or templatized classes? Really? More a couple of hours than one day. Definitely not years.
and UCBLOGO is available for every major OS, and has a friendly front-end for Windows available.
I can’t code for crap, mainly because I’ve haven’t really tried in over a decade, but I understand the basics of what programming is, and what it takes to get <foo> to do <bar>.
I started with Apple LOGO in an Apple //c.
I remember the enormous feeling of power when I realised that anything I could tell the computer to do, and told it properly, it could do for me. Then I was massively disillusioned in High School when the only programming course was in C++ and spent 2 chapters on things like Univac and Eniac and the history of mainframes and military computing.
The teacher was over 70, had never written so much as a line of C, and spent most of the class period taking smoke breaks. I spent that class playing video games, like 90% of the students (though I also intentionally broke the computer’s Win9X install, repeatedly). He graded it on a curve, and I, who had done literally no homework, got a D. This was in 1998 or so, before the bubble had burst, and they wanted to churn out C++ and JAVA programmers.
C++ as the first language for high school students? My first thought was “How do I make something happen??? This is all moving bits around! How much of this crap do I have to write before I can do… anything?”
Do low-level languages have their place? Yes, but not for kids who want to learn the _principals_ of programming.
Hell, I’d have been more entertained by some 6502 box and pure, raw, unadulterated assembly, because you actually _are_ moving bits around! Stuff is happening, exactly as I say.
Then again, the fact that they didn’t try Python(or is that too high level?) or some lisp/scheme(PLT is everywhere, and has everything but a turtle in its standard library, really) is surprising to me.
When I was a little kid my father wrote a small BASIC program that would do multiplications. When I saw how simple that was I knew I wanted to learn how to write computer programs, and now years later I am very happy that I saw that little BASIC program. Of course I have moved on to proper languages now (C of course), but I think BASIC is just fine to get kids into programming.
> C of course?
Pah.
Kids.
I completely agree with you.
When I try to explain their first program to people that is learning Java… Their Hello World program looks like:
package MyPackage;
public class MyHelloWorld {
public static void main(String… args) {
System.out.println(“Hello world”);
}
}
How can I explain them the meaning of package, public, MyPackage, class, MyHelloWorld, static, void, main, String, …, args, curly braces, System and out when the real thing is just executed by the println method and they do not know anything about the rest?
I disagree with people that thinks that starting with some
OOP language is good. The beginner needs to know more basic things like programming logics, what a variable is, what a subroutine is, how the loops works, the if-then clauses, etc… The constructions on top of this are… constructions on top of this. You should not build a skyscraper with no foundations.
If that is your only issue with introducing new programmers to Java as their first language, then look into J0 ( http://www.cs.cornell.edu/Projects/j0/ ) which exists to solve that problem by not requiring all of that for simple Java programs.
i’ve been teaching my 9 year old brother ruby on rails to get him to understand the idea of object oriented programming and the basic ideas of programming in general. so far im impressed by how well seems to be able to grasp the concepts and especially by how well he seems to be able to understand the same concepts when presented with a code sample that does the same thing in another language.
Why not just get the kid an OLPC? Or, well, any computer running Sugar on a Stick:
http://wiki.sugarlabs.org/go/Sugar_on_a_Stick
The ‘Turtle’ activity in Sugar is essentially a very basic programming language. And yes, I note the similarity to the Microsoft thing mentioned here. I dunno which came first.
I guess Logo came first (1967), but there may even be something before that…
http://en.wikipedia.org/wiki/Logo_%28programming_language%2…
You are right about apple. I too worry about the direction apple is pushing computers. That is why I repeatedly state, not to buy apple-stuff. I guess Jobs is trying to prevent that another younger and better Jobs will come out by limiting the ways you can use the apple devices.
Sorry Steve but one will come . . . . most likely from the open-source guys.
RealBasic is clearly an easy choice, tiered pricing and all, and shouldn’t take 3 years to get running or change icons on.
Gnu bash is another easy choice, though at some point you have to be offended at the scope selection and overall design, and maybe pick tcsh or something else handy, from a POSIX, gnome or kde toolchain to an IDE that lets you program arduinos.
Maybe one needs a program that takes beleaguered Fathers’ Day stories and makes some recommendations on how your search terms can be improved….
I agree some of the others comments, Python or Ruby are good languages to teach children and do real programming projects.
I started at the 11-12 with Visual Basic and then Python, and I think Python is the best choice to learn to program by yourself.
http://www.squeak.org, and learn the right language on the platform of your choice.
I’ve got one better: Scratch. The propellerheads over at MIT came up with this one. IIRC it’s based on Squeak and the visual editing eliminates syntax errors so kids can concentrate on the programming logic. I’ve used it with my students at school and it has been easy to write whiz-bang-BOOM projects with a minimum of effort while teaching real programming skills.
mit.scratch.edu
I haven’t tried it, but it’s from MIT and supposedly is awesome.
http://www.alice.org/index.php?page=sims_announcement/sims_announce…
Alice is cool, but the main problem is that it is really only useful for animation. The only aspects of programming that it teaches are sequencing of actions and loops.
I tried making some simple games with it, but it gets incredibly complicated just trying to do the simplest things.
I’ve also used Scratch, which is basically a 2D version of Alice, and I think it’s much better. It’s relatively easy to do cool things with it.
I want to join the fun. Why not start with brainf–k. It is also a good way to understand computer, but from a different perspective.
No, seriously. If you want to learn how a computer works the assembly language or machine code.
If not, choose ANY language. Everything is abstract anyway. Find a language that suits YOU and I mean YOU and don’t care about everyone telling you which language paradigm you should use. Being the most popular doesn’t mean anything.
Everyone tells you, you should use OO. If you like it, it’s great but its only one way of many. If you want to use true OO you have to use smalltalk anyway, but that’s an other story.
You can program everything with any language and any paradigm. And there is way more than imperative, object oriented and functional.
Last but not least, you can use nearly any programming language to program in any paradigm either by using it like using it in a specific way or by creating your OO or functional framework on top of it.
There is always a new hype coming out. Most of the programming languages never die. See Smalltalk, Tcl and Perl. They aren’t hyped and declared dead, but they are very healthy and have many new developments. New means cooler/hyped (for a while) and older means that you have more resources. See Perls CPAN, it can easily beat any cool new language.
I know what the author meant and I mostly agree, but in the end the developer has to choose the tools on its own. You will learn multiple languages and most of them don’t die. There are always new BASIC programmers, like there are always new programmers in all the other (currently) not-so hyped languages. BASIC, Perl, Ada, LISP, Smalltalk, …
All these languages are very healthy and there are tons of good reasons to use them instead of any other. Maturity has benefits, like youth has. All of them are good for learning, understanding and using in everything from for-fun programming to mission-critical, productive stuff. All of them can be and are used from small scripts to huge projects.
It’s the same thing with Ruby and Erlang, which had quiet a lot of hype in the last years.
So don’t waste your time. Choose a first language. You can always learn different ones later and knowing multiple languages gives a big benefit using any other language because you learn multiple ways to think about a problem and how to solve it.
Edited 2010-06-21 23:06 UTC
One thing that I think makes the learning curve so steep is that there’s not a lot of good resources for kids to learn programming with.
I had RUN Magazine, Compute’s books, Assembly Language for Kids (assembly language for kids! Just imagine trying to get that into a school library these days!), could read about TRS-80 basic in Tandy comic books, and could find Basic programs as an integral part of choose-your-old-adventure games. It doesn’t hurt that as a quasi-monopoly, having BASIC as the “only” choice for computers meant you could count on someone being able to run a program.
These days? Nothing like that. Programming is, at the earliest, a senior-level elective in high school, not part of the elementary school math department. (God, I could tell horror stories about my Visual Basic class.)
Heck, look at the front page of Google results for “Learn programming.” The top article tells you that you can’t learn it even in ten years (a wonderful way to quash hopes of kids – give up, even adults think it’s too hard). One uniquely worthless Wikihow article. Two resources for experienced programmers. Two articles about what’s the best language to learn. Two commercial sites promoting some company’s special snowflake. Only one (Cprogramming.com) has actual content about learning to program for the first time, and even then it’s not the core thrust of the site.
You want to make programming safe for the next generation of nerdy kids? Write, for god’s sake. We could have the objectively best programming language that can ever be made, and it wouldn’t matter if they don’t have a good clean way to go from complete ignorance of programming to the point where they’re informed enough to explore on their own. Write what you know – and write it clearly. Collaborate with others to make your text no more obfuscated than it has to be – and don’t be afraid to use a silly picture of a dragon to illustrate key concepts; I still think about assembly language in that way, thanks to Compute. If you feel really ambitious, bribe some elementary school teachers and try to expand your tutorial into a full-fledged set of lesson plans to go along with your well-written, well-illustrated tutorial.
Fill Google’s front page with well-made resources instead of articles that are worse than useless, and that’s how you’re going to keep kids coming into programming.
Edited 2010-06-21 23:32 UTC
Very well said. I don’t claim to know what’s right for the kids of today to learn though. I learnt on a C64 which was right for the time, but I wouldn’t suggest that now.
It’s not programming in the same sense as this article, but I am filling the first page of Google with content that teaches what I’m interested in. http://www.google.co.uk/search?q=how+to+learn+HTML5
You can create ‘basic’ syntax using a language that facilitates meta programing such as Ruby.
I did this for a couple of boys who are friends of the family and I plan to expand it to help my daughter not just to understand programing but also with math and logic in general.
The nice thing about this is that you can create something that is just as simple as basic but is much more pleasant and expressive for a child to use.
So, for example, rather then …
print ‘hello world!’
… you can offer …
draw ‘hello world!’
Which would draw it in a kid friendly font in the middle of a canvas. Also works great for geometric shapes and progresses nicely to parameters for colors, size, position, stroke then on to co-ordinate systems etc.
So you can do all sort of fun stuff without complexity.
]{
Yeah, as far as a kid friendliness, it’s probably the library that’s more important than the language in many respects. As long as the language doesn’t require too much deep conceptual understanding (5 year olds don’t typically know algebra or what a mathematical function is, and especially won’t understand complex type-systems very well), any python/ruby/smalltalk/etc. could fill the gap with a nice kid-centric library (you can create a draw(string) method in pretty much any imperative language).
As far as OOP goes, I don’t think it’s that important for kids to start off with object-orientation necessarily, as long as there are some form of data structure capability available, for kids to learn as they mature (like C’s struct). Trying to fit everything into arrays as if they are the only data structure is a waste of time at some point.
Admittedly, for really young people a graphical system like scratch might be a better introduction than a normal imperative language, because kids 1) don’t need to understand variables/basic algebra at all and 2) don’t need to visualize the results of programs while modifying them as much (in scratch, all of the objects remain on-screen in their position once you stop the program, instead of your program window disappearing).
The same problem is now common in many fields. You can now even study music at university without the ability to read music or play an instrument.
If it’s not a joke, then this is the most appalling thing I’ve ever heard.
No need to sightread, or even read music before being a true musician (e.g. Pavarotti) but playing an instrument is mandatory and in that respect, Pavarotti buried any living singer of his time.
@ unclefester: could you please confirm what you said? you’re really frightening me with that.
I do believe that line-by-line intepreted language like BASIC or Pascal are a good way to learn programming…the only problem is that these classical languages are becoming useless. It might be a good idea to put a free version of Visual Studio on little Johnny’s computer and start him on Visual Basic.NET. This way Johnny is learning a more modern way of thinking about programming (object oriented) now instead of having to force himself to change later. You still can learn algorithms and programming practice…but learning this in the framework of an object oriented environment is much more powerful and future-proof. Unfortunately, if you have a MAC, I don’t know what programming environment would be the equivalent…C++ (Xcode?) compiler I guess…perhaps dual boot windows to fool around with VB.NET i guess…
ok, times are changing, but, the wheels are still circular, 2+2 is still 4 and if your kid needs to learn that “primitive stuff”, the kids learning programming languages need to know the essentials too.
Edited 2010-06-22 02:10 UTC
Pascal is not a line-by-line interpreted language.
The level of complexity of VisualBasic.net is much too high for a small child. You need something much more specific towards that audience much as we have training toilets for small children, training wheels for bicycles, simple books, etc.
]{
It depends on how young the kid is, and how developed.
You mention simple books for kids, personally, I read “Digging Dinosaurs”, an adult popular science book by Jack Horner, when I was 7 or 8. Kids sometimes understand more than we give them credit for.
VB console applications are really simple. One click and one line of code and you have “Hello World”. You may be assuming that all VB applications have to be graphical and object oriented. Try making a console application, it’s a snap and good for training new programmers.
come to think of it, one of the first problem solving I did with computers was a robot combat sim. Basically you write the ai for a robot in an arena with other bots that can move, scan and fire. It also received damage events. All in all a petty good way to learn. I honestly don’t remember the name of it but likely it still exists in some form or another.
I started to produce
really USEABLE scripts with awk
4 hours from the moment
I took the Gawk manual.
My other scripting language
was Basic 20 years ago in an Atari Machine.
See subj (: It still has all simple libs like CRT and it works on any platform.
Have to say, this is not really true for Windows. VBScript is a pretty unholy thing in modern language terms. But if you’re young and just want your computer to do something, all you need is notepad.
Using vbScript, you can preform a pretty wide array of stuff. Of course I mainly use it for planting practical jokes on my mates’ computers.
Here’s one I prepared earlier:
1. Start Notepad.
2. Enter:
Dim szYou
szYou = inputbox(“What’s your name?”)
If Trim(szYou) <> “” Then
msgbox “Hello ” & szYou
Else
msgbox “Fine, be that way”
End If
3. Save the file, and then double-click it.
Man, back in ’88, I first coded in GW-BASIC using my Epson Equity II, with two dual 5¼ inch floppy drives, no hard drive, monocrhome monitor. Yeah it was great. It had nothing useful to do on it, so I learned to make it myself.
With the computer, had a huge three ring binder book with GW-BASIC reference material. More or less, a corporatey textbook which at 8 years old, I read, studied, did the examples, learned how to do things and made programs I thought were cool.
I made a text adventure game at a carnival where, usually, the person died several times where it would play the funeral march – which thinking about it, for an 8 year old is pretty impressive. I used the chart from notes to Hz in the book, found the notes by humming it a thousand times and writing down the correct notes from using a piano (no midi files to look up yo!) It ruled.
Unfortunately, my love for it waned as I got a Nintendo soon after. Though as an adult now I do still program now in C++, I wish I kept up with that love (other than at a hobbiest level since I made programs every so often but weren’t terribly complex).
Author is right, if I had started at C or C++ I would be flustered and would of quit. I waited until 1992 to learn C – then C++.
I think from learning GW-BASIC first, but learning by example, playing, hacking code away is what did it for me. It was still a full featured BASIC language set. While Small Basic seems cool when I played with it, it seems stripped down, especially because learning to code in DOS mode is much easier than GUI- smallbasic does it right, but by stripping down .net might not been the best approach.
It is a shame Pascal isn’t used much anymore as structured language to teach students, as I learned C++ much better because of it.
As noted by the author, BASIC gained popularity with home computers. You just switched it on and started typing. It was that instant magic, not the syntax.
Edited 2010-06-22 06:08 UTC
Johnny can’t code because public schooling in the USA is only geared towards socializing children into productive worker bees for the large corporations, NOT for teaching independent thought. Kinda hard to learn programming when school only teaches you how to OPERATE MS-Word, Excel, etc.
As others have pointed out, what matters is thinking about a problem in a competent and ingenious way, not the particular programming language. I am of the school that the programming language should aid in developing this faculty; a choice of a pragmatic language (e.g., C++) can always come later.
Start with Haskell and Smalltalk; learn assembly when learning about hardware.
Maybe I missed the point of this article, but wow, what a huge UI design problem we face. The save icon has always relied on a subconscious connection with a file being placed on a floppy disk. What does that mean to a 5-10 year old that has just entered the tech field? What universal icon could possibly exist? ow can you accurately convey the idea or concept of ‘saving’ in a world of cloud computing? wow. just wow.
One of my company’s web applications is aimed at the under 5s and uses a memory stick as the save icon.
Us old-timers still struggle with it but the feedback we get is that kids generally have no problems whatsoever.
I have not read all posts yet, so I react to the article itself, rather than to some concrete post here.
The author is kind of right. I learned basic on some old Czech communistic computer, called PMD-85 🙂 And it was really a fun – we started exactly by “moving pixels” around, and we produced very simple and primitive games.
Then I moved to ZX Spectrum, and later on – the Amiga. I still remember the AMOS basic. Man – you could do sprites, sounds, simply a complete games, but still in a very simple to understand BASIC.
Well, some educated ppl (which I am not, I am a self-taught IT person) might claim, that it provided you with some bad habits. But you know what? I don’t have much respect for such an opinion. And why? Because I still think, that ppl should learn very basic things about computing.
I am still sorry to not learn ASM/C long time ago, because it would provide me with much better understanding for higher level languages. Now you might ask, how BASIC is related to C? It is not, but it is good enough for the first steps in computing. Anyone trying to introduce kids to OOP or web programming as a first step to understand the programming technique, is imo doing a very bad job.
I am a REBOL addict. But I know exactly where my influence comes from. BASICs (ZX Spectrum, Amiga AMOS), and Matlab – you know what those share? A simplicity. I was amazed by Matlab – you could do cool things, with just basic understanding. You know – you don’t need OOP or any other modern crap, to make usefull things, right?
So – my final word is, that there actually might be some good “first languages”, and apart from the author, I would not discount scripting languages, being it REBOL, Python, whatever – simply put – start a console, and write some usefull little scripts, which automate the system for you. That is how Amiga has grown – via Arexx …
For some reason, nobody else before this post has mentioned the most important thing: choice. Which one? All of them!
Back in the 80’s, not many choices existed: you had about the same BASIC language available on every computer, with minor variations, with the Macintosh being perhaps the first computer sold without a BASIC interpreter with it. The operating systems were relatively primitive, and fairly simple, but also limited: again, choice, or the lack thereof. In addition, getting any truly “useful” software or major game was more likely to cost a lot, compared to relative costs of today: there simply weren’t free alternatives, beyond sneaker net of pirated apps and games. If you wanted something, you had to do it yourself, if it didn’t exist already, and/or it cost more than you were willing to spend: you had to choose to buy it, make it, or steal it: you had to make a choice.
Software back then wasn’t nearly as complicated as it is now, because, frankly, the microcomputers of the time couldn’t handle anything all that complicated, due to CPU speed and RAM and other resource limitations: you had a choice of doing very little at a time.
Software wasn’t nearly as readily available back then, even via sneaker net: there’s only so much bandwidth you can do via sneaker net, and dial up modem (very few people had anything better, if they even had that) was painfully slow. Of course, once again, software was much smaller and simpler then. But, it wasn’t very well-publicized, and to access such things back then, you had to learn a lot more just to get online: you had to make a choice.
Now, with open source software so readily available, with it doing so much of what people want, scratching their itch for functionality, people can still make a choice: get the proprietary solution via paying for it or stealing it (always will remain as options, I believe) or… go honest and get the open source software: it’s EASY compared to what it used to be, as bandwidth is rarely the limiting factor for getting it and installing it: it’s all a matter of spending the time and energy to understand what you’re doing, possibly grokking the instructions, maybe even looking at the code. Which language is it in? Most people… choose not to care. Those that do, well, there’s so much…. choice as to which language(s) a project may be implemented in. If you choose to start developing or just even learning how to code, which language is best? You have to make a …. choice. Back in the 80’s, for the most part, unless you spent a large amount of money, you had a native version of BASIC, or a native version of machine language: not much other… choice available. These days, there are umpteen different languages available, even simple ones: the only problem is… choice, and having so many to choose from.
Now, couple all those issues, together with the fact that what people expect out of computers is so far removed in terms of complexity from what people expected of computers in the 80’s: the barrier to writing code to do something that’s beyond hello world is much higher, not because there’s nothing available for learning it (there are lots of great books for beginner programmers, really!) or for having hardware (adjusted for inflation, likely far cheaper now than then, for a basic system) or for software tools (how many people these days buy basic development software, say, compilers, or IDEs? Not many!) of for what languages can do in their environments (quick, think of all the things you can do within Visual Basic for Applications within Microsoft Office: it’s far more than I could have ever done in Applesoft BASIC, even without leveraging all the nifty features of the system) but a matter of choosing to learn how things work at a low enough level, and then how they fit together with programming constructs.
In essence, to boil it all down: because so much is available now, compared to then, people don’t need to imagine what computers can do, they can see what they can do, and chances are, the solution already exists: they choose not to go into it, because they’re not motivated enough to do work that everyone else and their dog has already done, when they can easily get that work done for them. Those that really find the whole thing interesting, and have any aptitude, they’ll make the choice to find the way: that’s far easier now, in some respects, than it was then, and far harder in some respects, too, but it’s a double-edged sword, and cuts both ways. On the one hand, you need to learn a lot more about doing such things as GUI design, on the other hand, most any programming language these days will allow you to do far more complicated data structures and algorithms with the base language and libraries, or write your own, because the available languages are so much more capable and expressive, so someone with a fairly small amount of time spent, and self-study of basic data structure runtime and space complexity and knowing what they’re called, can do far more interesting applications in a short time than they could have done with any BASIC from the 80’s or before.
I learnt with Basic and Logo. I think Python and Awk are also good starting points. What is interesting is writing a single line of code and seeing immediately a result on the screen, unlike many programming environments where you have a lot to do before you get anything out.
When I was a child, I learned programming with Delphi. Even now, I still think that if the language was still taken care of, it’d be a very good start to learn programming. You can make shiny GUI applications with buttons right away to impress your friends, yet you have the power of a serious language under the hood.
Now, I’d rather suggest python, like others. It’s not as good as Delphi because you keep wrestling with the command line for tasks where it’s not suited. But it’s the best compromise in terms of general-purpose language nowadays, especially since it teaches good things like indentation right away.
However, when you look at the computing world today, it’s clear that programming is quite kid-unfriendly. That’s because childs are now taught that computers are a sort of typewriter-video game console mix. The “programmable” aspect of the thing is not taught anymore, instead people are encouraged to let other people code for them and buy the resulting product. The consequence of this is that people just see computers as buggy modular appliances and don’t understand why they have to use such a boring thing. If this way of thinking moves on, real computing will definitively go out of the home market and be replaced by iDevices-like content consumption devices. Which is sad, because those things are just overpriced castrated computers…
Actually, it is. I received, 4 hours ago, an email from Embarcadero about Delphi 2010.
Two of my most used apps are written in Deplhi: Subrip (a few years old) and FreeCommander (1 year old).
The IDE is still taken care of, true, but who, outside of the professional world, does still use Pascal (Object) ? Most of the freely available PO libraries on Delphi, last time I checked, were crappy ports of C/C++ libraries. I say crappy because it wasn’t true Delphi code, but rather C code with a Pascal syntax. You had to use C-style strings (GetMem + StrPCopy madness ensues), pointers, and so on.
The beauty of Pascal Object is that it manages to be a clean and complete language. Putting C-style functions on it is destroying its cleanness…
The second thing that made me move from Delphi to Python, some years ago (before I started learning C), was the lack of a good Linux IDE. Sure, there was Lazarus, but I don’t call software which makes 6 MB large binaries a good IDE… And Kylix was a joke to begin with, I exactly managed to get it running properly one time.
Edited 2010-06-22 16:18 UTC
Check this out: http://www.freepascal.org/
EDIT: Oh, and this: http://www.lazarus.freepascal.org/
Edited 2010-06-23 07:26 UTC
I know about that, but do they now have libraries that are properly ported to pascal instead of C libraries with a pascal syntax ? And does Lazarus finally manage to make binaries that don’t weight several MBs for a hello world application on Linux and Windows now ?
Please read the parent post fully.
Edited 2010-06-23 08:02 UTC
Well, have you tried it lately? And, of course there is also this:
http://wiki.lazarus.freepascal.org/Size_Matters
Ugh. “It doesn’t matter, computers and networks are powerful enough” as a justification for lack of optimization. Looks like something taken from the brain of a Microsoft dev…
Well, I think their points are very valid. But of course, you don’t *have* to use it. By the way, they do list some possible causes for big binaries, and how to solve them.
If you want small bins, just use C. But we’re talking about learning languages here. Size doesn’t really matter then, now does it?
As long as programs can be sent by mail, it doesn’t. If they really manage to go down to ~1 MB now, it’s acceptable because you can stick 7-8 softs in one mail. On lazarus’ early days, with 6 MB binaries, sending some sample programs was much more complicated than it ought to be. Especially taking into account that ADSL ran at ~30KB/s then…
I still think that their point about delphi is a bit weak. They can explain why their binaries are big, but they miss the point of how Borland managed to make them weight 200-300KB for the same level of functionality back in the olde days : just have a redistributable shared lib package available for download and a stable RTL…
Edited 2010-06-23 15:30 UTC
I loved playing with QBasic in elementary school. I’m not much of a programmer, but I’ve been recently playing with Processing (http://www.processing.org/). It’s an open source derivative of Java created to allow non-programmers (primarily artists and designers) a straightforward but powerful way to get into programming. It allows for the kind of instant gratification that BASIC offered.
It’s funny how this debate keeps taking me back to music. The best reason (other than the price, obviously) for me playing guitar instead of cello is that: the instant gratification.
I’m not sure the comparison of a guitar to BASIC fully lines up. The guitar varies WILDLY in construction: although the primary distinction is between acoustic and electric, individual components and construction materials vary greatly, and even the method by which they are played differs. Much of this stems to how different cultures have interpreted it, and many guitarists are quite flexible in the sort of music they play, since music written or transcribed for it (especially compositions written for lute) is so prolific.
The cello, as a member of the viol family, has changed very little in construction and method of playing for hundreds of years. To my knowledge, it has not even been electrified/amplified the way the violin and the double bass (standup double bass, not guitar) have. Furthermore, those instruments have been adapted to other musical genres (think violin as “country fiddle” and plucking standup bass in jazz), while I sincerely doubt that the typical cellist plays much more than classical genres (Baroque, Classical, Romantic, etc.) on a cello. Even its appearance in instrumentation for other genres usually takes on a very classical tone.
The comparison is limited to the “instant gratification” aspect.
Guitar is hard and takes years for the average person, just like any other instrument as 6 years after starting I still have problems with fast chord switching and some barrés, I still miss and mute strings, etc.
However, strumming a chord is easy and a C chord makes five strings (!) sound at the same time, which is a rich sound. Switching to an Am requires moving only one finger. Another switch to Em is straightforward. C, Am, Em, Am is not a common chord progression but it’s easy and beautiful, even more when played with arpeggios. For me it took the opening ceremony of the Athens Olympics to have the C and Am arpeggio.
Another example, sounding a string is putting one finger on the fretboard and plucking the string with a finger of the other hand.
I don’t see any non-keyboard or non-fretted instrument compete with that in terms of “instant gratification” although the “instant” is of course in comparison with bowed instruments where before playing a sequence of two notes, you need to learn the correct posture, correct handling of the bow, both in pressure and position, have an ear (which I’ve never had) for knowing whether you’ve hit the right frequency for the note you want to play. Even the tablatures are more easily read by a total newbie like I was than standard notation.
That’s were the comparison started and ended. Other than that, I agree with you.
This is essentially a story of a dad trying to recreate a childhood experience with his kid. That has plenty of validity, but I do not find he makes a case for how basic is a better environment to learn the basics of programming then the numerous other things he mentioned.
“Make a kids game in C++…
Oh wait, should probably start with SDL…â€
I think he does have a point. That for kids you need to show immediate results that can be tweaked according to curiosity. Not “Let’s start with meta programmingâ€.
VB6 (imo) is a million times better for BASIC in that regard.
VB6 was a POS then and it is now. Delphi was and still destroys it and .net.
I wish people would actually read the context of a comment before responding to it. Nobody was talking about how good or bad VB6 is, what we were talking about was better tools for getting immediate results in programming then BASIC. Your comment added nothing to the discussion, and makes you look like an idiot.
What do you think sounds more likely to capture the imagination of an 8 year old.
“A function pointer is a variable that stores the address of a function that can later be called through that function pointer. This is useful because functions encapsulate behavior.”
or
“Would you like to draw some crazy dots and lines that wiggle around the screen at your command?”
My parents got their first computer, a Mac Classic, in 1991 when I was 9 years old. It came bundled with a copy of HyperCard 2.1. My father noticed my interest in the computer and found an article in a magazine with an example HyperTalk script. We tried it out together and a few more examples from the user manual. Then I continued exploring on my own.
This is before I had learned any English. Fortunately both the application and the manual were in Swedish and thus the script language itself was all the English I had to deal with.
Most of the time I was content making simple point-and-click adventure games where you’d explore old castles and fight the skeleton from the clip art gallery. The HyperTalk scripts seldom did more than transition to another ‘card’ or display a sequence of cards to create an animation. Some of my friends got inspired and started making HyperCard games of their own.
Unfortunately I got lost in Klik & Play. While I did have a lot of fun making games, Klik & Play proved to be quite limited and very buggy and ultimately it felt like a dead end.
I returned to HyperCard and began writing more complex adventure games (that never got finished) plus some other things like e.g. a Mandelbrot renderer. I also taught myself HTML, CSS and TI-83 Basic.
Then Apple released Mac OS X and with it came Project Builder (now Xcode). Finally I had the “real tools” I had been waiting for. Sadly it seemed all tutorials on Objective -C assumed prior knowledge of C or C++, something I didn’t have. Thus I progressed slowly and not very far – no until I started studying computer science at the University. But that’s an entirely different chapter of my life.
Abandoning HyperCard is in my eyes one of the worst things Apple have done.
While things have gotten more complicated I do think kids today have one advantage – the internet! When I was a kid I had to connect through a modem, pay for every minute that I was connected and then disconnect as soon as my parents needed to use the telephone. I didn’t prioritize asking for advice from random strangers on IRC.
Well, that’s my story. Hope I didn’t bore you too much.
If you like “Small Basic” then you might also like to try SmallBASIC
http://smallbasic.sourceforge.net
Runs on Linux, Windows, PalmOS and even the Franklin ebookman. Comes with tonnes of examples programs all in a very small footprint.
In my opinion, it is not about the language or ide. It is about the gap between those people who know their problems and who have an idea to solve them. And those who can code. The bad thing is, there are too few people in both crowds.
The solution is not to teach people a academic language and the whole shebang of different coding models. Give them a tool where they start with an already functional gui application. Something to _play_ with. And an easy, graphical way to handle it. Yet able to use an editor to code when you mature on the field.
And it should be free in both ways.
I think that Adobe Flash offers one way to do it. And as I know FileMaker, I look on FileMaker more as a RAD, not a database. But those are not free and don’t run everywhere.
We need an ide which is already a functional application and the foundation of new apps, that has everything we need, like database access, http connectivity, … I don’t mind which “script language” there will be, beside that there is one.
I don’t know Revolutions. Does that work that way?
At least I did. It has everything. Sure, I statred with BASIC on my C64, but I quickly dropped that like a brick when I had access to MONITOR and could mess with assembler. But that’s offtopic.
Later forays into coding was with Turbo Pascal. Pascal has given me habits (neat indenting, declaring everything, good procedural coding, thinking things out before you implement them, etc.) that appear in my non-Pascal code today. And the compiler was fast.
Heck, Turbo Pascal had pointers, object oriented programming, inline assembler, pass by value/reference, and it was easy to create your own units (libraries) so you could easily reuse your code. What more do you want for a language to start out with?
Screw BASIC. Here’s to Pascal!
The dumbification of today’s youth (not only with regard to computing) is a short term blessing for the thirty-somethings job security. I dare not to think about the longer term effects.
Basic is probably not the best choice, You can do line by line structured programming in Pascal using the free pascal compiler. Pascal is as easy to learn as basic, yet is closer in form to C or java than basic, not to mention you get native compiled executables with pascal that don’t kneed any framework or interpreter to run.
I started off with BASIC on 8 bit computers. Yes, Basic is crude but it taught me some basics:
– Decision making
– Using loops
– Use subroutines and functions where possible
– minimise use of goto where possible
– Economic use of variables
– Syntax and command formats
Fortunately, without having to use advanced languages, which can be learnt later, then I suggest QBasic (QB64) from:
http://www.qb64.net/forum/index.php?board=2.0
I know it’s Microsoft endorsed but has anyone tried Small Basic?
http://msdn.microsoft.com/en-us/beginner/ff384126.aspx
It looks pretty kid friendly.
Why don’t they just fire up an emulator?
Majority of people are non-programmers, but, still need to automate some tasks for daily use. Applications like OOCalc and MS Excel, for example, offer quick and easy scripting in BASIC. BASIC offers quick and dirty coding, and that is what casual coder needs. I didn’t use term “programmer” intentionally. They won’t get their creative abilities tainted, because their creativity is directed towards quite different areas.
So, teaching BASIC might help, perhaps 10 or more people for each one who might (or might not) encounter difficulties in programming career.
I am trying to find some embeddable BASIC interpreter for my own Java applications, to offer some level of customization to customers. Most of them employ someone with rudimentary knowledge and experience in coding. Unfortunately, I’ve found either GPL-ed interpreters or tools that compile BASIC instructions into Java Bytecode, both of which are unsuitable for my needs.
I’m in a situation where I am not a developer, but from time to time I need to extract data and generate reports from massive logs, or automate tasks or do math.
I grew up, like many here, with a Commodore 64. I ran a BBS for awhile back in the 80s on C-Net, which most Commodore people will remember if they dialed out. The BBS software was written with the lower level routines in some kind of compiled format (maybe assembler?) and whatever could be done in BASIC was done in BASIC.
This allowed for extraordinary extensibility and modification of the code. As such, almost everyone who wanted to run a BBS learned Commodore BASIC as a matter of course.
I think what I learned is still applicable today. If I decided to be a professional programmer with my lack of formal training and skills, professionals would be right to scoff, but you know what? My code *works*.
It may not be the fastest code. But it is well commented, even if amateurish. I have several dozen scripts (mostly Perl) I’ve written that I use daily, and all do the job they were written to do.
I think if you’re going to be a professional developer, you have a whole host of separate concerns. But I think one thing we have lost is the idea that you can be a non-technical person – hell, you could be out of the workforce entirely – and still benefit from knowing how to automate tasks in whatever language works for you.
And I say this because I was maybe 12 years old when I learned Commodore BASIC from the manual that actually came with the machine. And I’ve been automating tedious tasks ever since. You could own a floral shop and probably find ways to save yourself time if you just knew a bit of programming or scripting or whatever you want to call it.
I’ve long observed that if you encounter an inefficient, repetitive user behavior which could be automated away, and you did some math with someone who is not computer savvy, calculating that:
8 hours to learn enough of PHP or Perl or Python to automate a task, plus another 8 to actually write it = 16 hours.
If over the course of the year, the person wastes 100 hours manually repeating the task, they will still look at the 16 hours it would take to automate it as an unreasonable, insurmountable time investment, and choose to waste the 100 hours instead.
This isn’t always true of course but it is much of the time.
This has never made sense to me, especially when you consider the value of the 8 hours spent learning a language, which will be directly usable in the future (by itself, or to be built on) to automate other tasks away.
I just kind of wish basic programming was part of any office’s universal skill set, especially when I note that in any company I’ve worked for, there just aren’t people employed for the purpose of automating away individual employees’ annoyances. Developers anywhere I’ve worked are involved in building and maintaining foundational enterprise applications. If you’re lucky and you make nice, maybe you can get one to do you a favor, but that’s about it.
There is too much criticism of entry-level languages by professionals. It’s like being a Formula One driver and deriding Vespa scooters as “underpowered.” Languages serve not only different needs in a programmer’s toolset, but they also appeal to different populations.
As much as people freak out every ten minutes about PHP, there is nothing wrong with an amateur with a personal website dropping a simple static include(“footer.html”) statement in the bottom of an HTML page. That’s what it’s there for.
I would love to see a return to the idea that every kid should learn to program, and I see no point in BASIC anymore. Is basic Python or even Perl much more complicated than BASIC? I don’t think so. It’s also relevant, and portable, and cross-platform which BASICs I grew up on were not.
At the company I work, the only language I can be positive will be either installed or available on all machines is Perl.
In the 80s, we had to take computer programming classes, in labs full of Apple //es. It would be nice to see something similar, maybe with Python, integrated into math classes, for all students.