Why Teach Programming With BASIC?
chromatic writes "To answer the perennial question 'How can we teach kids how to program?', we created a web-based programming environment. As we began to write lessons and examples, we surprised ourselves. Modern languages may be powerful and useful for writing real programs, but BASIC and Logo are great languages for demonstrating the joy of programming."
I've never loved programming as much as I do now that I use C#.
10 print "hello"
20 goto 10
There is still the theory that once you teach someone basic it becomes impossible to teach them programming. /running and ducking...
Sig Battery depleted. Reverting to safe mode.
10 ? "First Post";
20 Goto 10
I learned to program pretty much with Applesoft BASIC and a Franklin Ace 1000 manual
Now I'm teaching my mom (!) to program in Python using the Hello World book.
Honestly, I wish Python were around when I was learning. Trying to squeeze a new instruction between line 11 and line 12 kinda sucked sometimes. (Then again, I wish a lot of things were around...)
...They GOSUB and don't RETURN.
Logo is an educational language. With the addition of Turtle Graphics, it's a great way to show a student how to deconstruct a task into components and instruct the machine to perform that task. Wanna draw a hexagon? Pen down, move a bit, turn 60 degrees, rinse and repeat.
BASIC means Beginner's All-purpose Symbolic Instruction Code. It, too, was an educational language. Of course, since so many learned it early on, it turned out to be useful to evolve it into things like VB Script, VBA, and now VB.NET, so you can do everything from web page scripting to writing spreadsheet macros to building sophisticated desktop applications with some form of BASIC.
So why is it any surprise that languages created for teaching purposes are good for teaching programming?
despite their limitations and age, procedural languages are a better way to teach kids (or anyone)how to think logically about the steps required to make a computer do something they want it to do.
It worked for me in 1971 on a teletype at Cory School in SJ connected to a Stanford mainframe -which I had to feed my 'saved' paper tapes to
and it will work just as well today on whatever BASIC emulators (or even VB.NET god forbid) that are available today on PCs, pads or whatever.
Although Java is probably better for middle/high school, I do believe that Basic or Logo are better for those younger who have not yet learned how to deconstruct a desired outcome into a bunch of logical steps.
-I'm just sayin'
# We wanted a system easy to secure, such that there are no mechanisms to escape the security of the system to manipulate either the underlying machine or the experience of other users. In this case, a language with fewer features and fewer possibilities for abstraction and cleverness is easier to audit. This meant evaluating our implementation for potential mischief.
clubcompy sounds like a miserable creativity quashing experience.
I learned Basic on a Commodore VIC-20 in 1978. I think it is a terrible choice for learning to program. I suggest newbies learn Scheme, a very simple language that will lead you as far down the rabbit hole as you are willing to go. If you are more interested in electronics you should learn C, particularly on the nice small embedded development boards that are available.
an ill wind that blows no good
Logo is indeed a excellent beginner's language that can instill all the good programming habits that lead to great code. And if the learner is young, add some graphic library like the old turtlegraphics and you will pique their interest to go in deeper.
Basic, on the other hand, is a half-assed POS that was excreted out of an abortion, one dark Friday the 13, when Bill Gates and Belzebub got together to play a cruel joke on the universe.
Oh, the ugly.... How about Assembly Language? >:D
I personally started with Logo and assembly language, but only because it was what was available in school (Logo) and on my DOS 2.0 floppy (DEBUG).
Looking back, BASIC may have been the most available language available on ROM at that time, so that's what folks used (despite that it supposedly 'mutilates the mind beyond recovery' according to Dijkstra http://en.wikiquote.org/wiki/Edsger_Dijkstra ).
I think now, javascript would have that advantage since it comes with the browser (and firefox is particular has got good debugging support for javascript).
"Here, son, let's look at this Wordpress site that hasn't been updated in 18 months. Now, this is called 'SQL Injection' and 'Cross-site Scripting.'"
Nothing better than learning by example...
I guess it's a good thing you don't teach Unix.
While high-level abstractions like .NET and Java are splendid modern tools, nothing teaches you the fundamentals of how a computer thinks and works like a line-by-line BASIC program. Two reasons off-hand:
a) The leap to assembly language is natural and easily understood.
b) The leap in the reverse direction, to functional languages, is mostly a simple matter of wrapping blocks in headers and return statements.
If you start in a language with these two attributes, you're already 1 - 2 years into a collegiate computer science degree.
BASIC helps to teach logical though process, critical in both programming, and in business analytics. I learned BASIC on an Apple IIE back in the 80s and a C64. That knowledge went dormant, until about 10 years ago when I began using Access, Crystal, SQL (and derivatives) and now SPSS.
Wow, this "story" is a really blatant advertisement for a commercial website.
No, BASIC is not a good language for much of any purpose, including education. Especially not the archaic type of BASIC they're using. Computer science really has progressed in the last four decades. Personally, I'd recommend Python as a starting language - it's easy to learn enough to do simple things, it's a well designed language that teaches good habits, and it's a "real" language that you won't outgrow as soon as you start writing anything beyond toy programs. But if you want a language designed specifically as a learning tool, there are lots of those that are a lot more modern and let you do a lot more than this company's offering: Processing, Alice, etc.
"I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
I think Python is a better contemporary choice now (and I learned on structured BASIC - QuickBASIC)
There is noting inherently complex with OO, unless you already have a head full of linear or procedural programming that you need to get rid of.
A nice, stripped-down OO language - I'd sugest parts of java if it was a free language - would be a good start. Even a graphical interface, although they are undeniable useless for real programming, would be useful for starting off.
Prediction for end of Universe #42: Fencepost error in Quantum_bogosort.cpp
Back in the day, when I programmed a Harvard Mark III computer, you had to check out the entire computer six weeks in advance and then enter your program from the console, under tremendous time pressure, using switches for 1's and 0's. There were no compilers and no operating systems. If you made a single mistake, either during preparation or program entry you were hosed. If any vacuum tube blew or relay malfunctioned during your run you were hosed. If the CO showed up during your shift and commandeered the computer for some emergency purpose, you were out of luck. If the Germans attacked the base during your run - and sometimes they did - you were out of luck.
BASIC? Really? In 2010 someone is making products with BASIC?!?!?! This has to be for legacy supp... wait you say it isn't? WHAT THE FUCK!!!
Please do your students a favor and use Python.
Those of us who were kids in the 80s and grew up playing on microcomputers with BASIC have a very distinct property:
We grew up together with computers.
When we were kids, computers were simple, single-tasking, small memories, and it was easy for a youngster to understand the entire system. As we got older, systems got more complicated, and so did our ability to understand them.
Today's kids start with computers that are already large systems with complex operating systems, millions of times more memory than we have *disk* when we started, that are difficult to understand at a low level. I think this puts them at a loss. Every child should be able to play with and learn on an Apple II, C64, or similar small system. Of course realistically that won't happen. So emulated "systems" with simple programming languages may indeed be a good idea for today's kids.
Teach them math and language skills. These are the fundamentals of programming and it is a waste of time to teach programming until these foundations are in place.
Pretty cool little Commodore 64 emulator but the peek, poke, and sys commands have yet to be implemented. Luckily the GOTO command was implemented. The Java and OOP Nazis have been trying to kill GOTO for years and I am glad to see that it is still alive and well for future generations of programmers to enjoy.
If you are new to basic try this little program...
10 ? 'HELLO WORLD'
20 GOTO 10
Dear FBI, please stop by sometime later this week. As you can see, I am at home at 7:12pm CST. Thanks!
FTFY
"Going to war without the French is like going deer hunting without your accordion." ~General Norman Schwarzkopf
loop while( true )
screen.print( "Hello World" );
Prediction for end of Universe #42: Fencepost error in Quantum_bogosort.cpp
I might, if there were a simple, cross-platform, one-click-install download bundle for all of the major operating systems which included pygame and a decent IDE, and even then I'd target motivated 13 year olds as the youngest users.
If I were trying to teach motivated ten year olds in person, I might choose Python/pygame as well.
That's not our goal, though. We're trying to help motivated eight year olds discover the joy of programming as a means of using computers as creative tools, not to produce millions of practical programmers.
how to invest, a novice's guide
the correct question would be...
how do we get our kids interested in learning how to program?
and the answer to that would be...
tell them they're not allowed to do it.
Sounds to me like he should only be allowed to teach eunuchs.
Error: While is a word reserved for future use.
:)
Looks like that is on the to be implemented list as well, but GOTO works
"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."
- Edsger W.Dijkstra
There might be hope for subjects that started using "gosub" without ever using "goto" but I have never seen anyone having done that.
But then again IMHO today's html/javascript is one form of modern spaghetti code too so maybe BASIC should be taught because of that.
Try a real one. http://members.cox.net/javacoco/
You can teach people logic statements and procedures and about objects, even - with ENGLISH.
In my grade 8 class, there were no computers except the ones at the University I was by then programming with punch cards using stolen student accounts. But the math teacher asked us to write out our procedure for tying our shoes - in precise, motion-by-motion detail so another student could do it exactly the same way as we did, without help. Most people required over a page, and it was a revelation how excruciating it was. Later, in CompSci 501, I learned about logic statements and predicates and the wonderful Lewis Carrol problems ( 1: All my turtles that are not green are old....) All English.
"Computer Programming" on the other hand, is about making computers do things for you. By hook or by crook, by object or procedure, just get 'er done. I completely agree with the language snobs and detest BASIC. And I do most of my programming in it because you can make Excel about 10X more useful with just a little VBA here and there.
Learning Python or Java is just great if you plan to be a professional programmer one day, those languages can solve very large problems without the codebase becoming unmanageable. If your problem is getting a bunch of kids excited about what computers can do, you have no choice but to use whichever language will produce results with the greatest WOW factor with the shortest learning time.
That cuts out ALL verbose languages, languages that demand typing. The "Hello world" program should be one statement long.
Notice that doesn't chop out Perl or Python. But also notice that at kid-levels, those languages can only take screen input and produce text output. That was cool for me in the 1970's but I think today you'll get better results with something that can go graphical right away. (This also just cut out your original BASIC).
So, if your school has MS-Office on every machine, well, as a FLOSS fan I hate you, but you're crazy if you don't leverage the presence of VBA. You can show them what cool stuff a computer can do with Excel alone, show them some formulas in action and all that. (This, by the way, keeps them from thinking of "computer programming" as necessarily procedural right there - clearly, you are instructing the computer, but you are NOT using a procedure, just setting up conditions for behaviour of the cell objects!)
Then show them procedural programming by modifying the spreadsheet with VBA. This can lead quickly to manipulating the Excel data structure, which is a huge collection of objects with properties and methods. Many can manipulate charts in pretty ways, or turn Excel into "graph paper" with coloured cells in funny shapes, like ASCII art. You can take it all the way to them inventing their own objects in VBA.
AND: It will be useful in a job, even if they only learn to write 10-liners. Bonus.
I might, if there were a simple, cross-platform, one-click-install download bundle for all of the major operating systems which included pygame and a decent IDE, and even then I'd target motivated 13 year olds as the youngest users.
You can run Python directly in the browser - no need for installs at all. In fact one of the motivations for getting CPython working in JavaScript was for things like this. (Note: It doesn't work perfectly yet, but all the hard work is already done.)
For a basic IDE, that demo includes Skywriter. Integrating some additional features like load/save etc. would make it very usable I think.
Regarding pygame: It would be possible to get something like that working in the browser, targeting an HTML canvas element. See this demo for C++ code written against SDL, compiled into JavaScript and an SDL implementation that targets a canvas.
Could always teach them java.
First they would have to install the java interpreter, and then some class libraries.
Then, they would have to figure out what to import to run "hello world".
Then, they could share their java program with other people, as long as they have the same version of the interpreter, and the same class libraries.
Then, when something doesn't work, they can sift through a huge stack trace and figure out they missed a semi colon.
Or, we can use basic, not have to worry about libraries, versions, etc, and concentrate on algorithms, etc.
Java is great for those who want to learn how to type.
BASIC is great for those who want to learn how to program.
When teaching students how to program (which is entirely different from teaching them computer science), you should begin with the most fundamental concepts: talk about raw memory and opcodes. Discuss briefly how these instructions are actually interpreted and implemented (how a half-adder works is fascinating, even if most people never have to build one in real life).
Once your students understand how to make computers do basic things with raw instructions, teach them jumps, conditionals, loops, and even subroutines. After that, introduce higher-level languages and compilers, and demonstrate that the compiler merely automates what your students have already been doing. From there, teach progressively higher-level constructs, including second-order function references, data structures, and so on. Object-orientation falls out naturally once you get to structures and function pointers.
If you follow this approach, your students will have an understanding of the entire abstraction hierarchy, which is not only of immensely practical value, but also underscores the principle that nothing in this field is "magical". You can always pierce an abstraction, and even more importantly, erect new abstractions where appropriate. The most common flaw I find in programmers is the inability or unwillingness to build new abstractions. The only way we make progress in this field is by the old reductionist approach of breaking a hard problem into smaller parts and attacking each individually. When you teach your students how to do that by demonstrating the power of abstraction, you make them better programmers.
Programmers shown UML, Java class graphs, and so on right away become too familiar with that level of abstraction. They think of lower levels as some kind of magic and don't realize they can and should build their own levels on top of what they're given. The result is often incoherent, rambling, brittle, and ugly code. Don't let that happen.
Languages designed for teaching coding to kids are useful for teaching coding to kids.
Also, water is wet, pope is catholic.
This looks like a great place to donate a few bucks, especially in light of the article last week about how most schools don't have anything approaching Computer Science classes these days (if they ever did). Anecdotally, there are plenty of graduates with a BS in CS who couldn't traverse a binary tree if their lives depended on it, and I think a lot of that is due to students who have no actual background in programming before entering college or university. I dropped $10 in the jar, and I'd encourage anyone who's concerned about the future of CS talent to do the same. I don't know if it will help, but it seems like something worth trying.
Full disclosure: I've been looking for a way to show my kids about programming for a while now. There are standalone BASIC and LOGO IDEs, but I think the social/online aspect of this project is something that will appeal to a lot of kids, especially since they can't just hang out at a friend's house making games that rival the latest commercial titles anymore. Almost nothing of the culture that drew me to computers in the 80s exists today.
Posting AC since I already moderated in this discussion..
Perhaps the reason we start at a higher level than BASIC is because we want the kids to get in there and start going first. A hello world program is pretty exciting. But if it takes you a shit ton of time to make it happen you aren't going to capture the attentions. A simple program should be simple. I know I found the underlying structure and commands a hell of a lot more interesting once I saw what their higher level counter-parts could do.
Today's kids start with computers that are already large systems with complex operating systems, millions of times more memory than we have *disk* when we started, that are difficult to understand at a low level.
Actually, there's another side to this.
We now have much greater abstraction between the developer and the underlying hardware -- so you don't need to fully understand how to position a hard-drive head, or write assembly or even proper memory management[*].
Today's kids will have the "next big ideas", do we really want to scare them away by forcing them to worry about all the things we lost hair over?
The closer we can get them to turning ideas into working software the better.
[*] Blasphemy, I know... but leaving it up to Java or .Net can make things much easier to learn.
The answer to "Why teach programming with BASIC?" depends on which language called BASIC you mean, and the answers vary from "You don't know better" to "You want to teach them how to write quick one-off VBA macros, not to program" to "You passionately hate your students."
Assuming that you want to teach them to program, use a language that incorporates some modern language features and gives them room to grow, but has enough in terms of training wheels that they aren't distracted or frustrated by unnecessary trivia. Python, Ruby, maybe C#.
Am I part of the core demographic for Swedish Fish?
I learned to program in BASIC, on an Apple ][+, back in the early 80's when I was 10 or 11. I loved it, but I started wondering how programs like word processors could access a large document in RAM, and work with files bigger than available memory, and other mysteries...which led me to learn C (with a classic Borland C compiler) at 15, and eventually to a CS degree.
In my case, BASIC (and I did LOGO too) didn't ruin me, it made me more curious and moved me into the more complex languages. When I got to college, data structures class was a piece of cake, as I'd already done linked lists and other structures while learning C, and I could easily deal with pointers and pointer arithmetic, multiple indirection, function pointers, and more. I feel a debt of gratitude to the humble BASIC language.
Just a couple weeks ago, I started teaching my son Apple BASIC from a web-based Apple BASIC emulator, hoping that he'll be as excited about programming as I was.
Gee, you might think that name stood for something... I heard about it many many years ago. Some programmer wrote it to be easy for newbs to learn to program with... Now what was it...
Oh yes, I remember now! Basic!
Sarcasm aside, Basic is an acronym for Beginners All-purpose Symbolic Instruction Code, and yes, it was written to be used in teaching newcomers how to program, so it's absolutely no surprise that some people have found it useful for that purpose. (It's about as surprising as finding out that snakes slither...)
When i first saw Scratch, included with the XO, got stunned on how powerful it was, and how visual and intuitivel could be for the children. Not sure if there is a web based implementation, but is open, available for all platforms, and maybe more important, already included in a computer meant for children (not sure how much it count in the rest of the world, but in my country almost all school chidren have it).
Kids are Kids. They should play. The more they play the better. They can learn basic first, then the others.
While i personally always would use an opamp at work to build a precision measurement amplifier, if i had a kid i would start to teach them electronics by building a simple amplifier using one transistor or two.
I've got a big soft spot for pascal. I started wtih basic, and then LOGO (home computer had basic, then logo in school as a kid), but Pascal was the first useful language that actually taught me about data types, functions, and later, object oriented programming (TPv6).
Its easy to read, not prone to bugs like using = when you mean == (in C), and fast enough to get useful stuff done.
Problem with programming these days is that to get anything useful done you're buried under a hundred layers of toolkits and abstraction from what is actually going on.
Give kids an old PC with a copy of DOS, turbo pascal and some basic instructions on VGA mode 0x13 and you can write fun stuff pretty quickly.
I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
However the statement that "Programmers who've learnt BASIC tend to be harder to retrain in a modern object oriented language" requires statistical study.
Is C# "a modern object oriented language"? If so, then there's a dialect of BASIC that requires little or no retraining because it's functionally equivalent to C#, just with different syntax. It's called Visual Basic, and it's part of Microsoft Visual Studio Express.
Or, you know, there's actual emulators such as AppleWin for the ][ series
How did the author of AppleWin get the right to redistribute the Apple IIe's copyrighted ROM?
1) no type declarations
- it gets in the way of learning how to do stuff
2) interactive command line
- you need to be able to see the variables and change them
- edit run debug is part of the learning process we don't want them separated yet
3) persistent environment
- being able to interact with the variable and program set is part of the learning process
Suitable base types: basic, logo, lisp, matlab/octave
I would really suggest Matlab/Octave for high school math.
For those that hate basic because of the lack of structure, use COMAL. Similar substitutions may be made for the other languages.
(smash (1351))
>> Problem with programming these days is that to get anything useful done you're buried under a hundred layers of toolkits and abstraction from what is actually going on.
Line numbers and gosub/goto s haven't been used since the mid80s.
Ever program with a VBA object model, using Intellisense prompting? Name a better, more complete, and useful IDE environment...
Count curly brackets all you want. Regard semicolons as essential. But you can't craft code that reads like simple English in any other language. Well named objects only make BASIC better.
BASIC is like the O'Reilly cover that was chosen for it: A big friendly St. Bernard or a language.
If you haven't built dozens of useful, maintainable, systems quickly, with small teams, maybe you should keep an open mind...?
"Knowing everything doesn't help..."
The Java and OOP Nazis have been trying to kill GOTO for years
It depends on what kind of Nazis. C# still has it, for one, even though it came long after Java (and is otherwise similar).
Certainly those of us who write code needed this vocational education, but it is shortsighted or arrogant to think everyone else does.
Granted most will not think of it as a programming environment. But it has all that is needed.
http://www.gnu.org/software/octave/
If then, else for ....
It has all the fundamentals.
It allows you to plot all those high school math functions.
It has a persistent environment/cut-and-paste commands for debugging and looking at your state space.
And it is free to all, so great for the education system.
I worked for 11 years writing payroll applications in a version of basic. It powered a significant number of payroll systems in the UK and probably accounts for most people's wage slips even today. Now I write web sites in ASP, running VBScript. BASIC lives and will always have a place.
Pro Coffee Drinker
But snakes are better. Kidding aside. Python is based on ABC which was an educational language just the same.
But... the future refused to change.
I bet awk would be a good first language. You can do interesting things almost immediately with it and when you delve deeper you start getting the rudiments of C syntax which leads to a good many of other languages. Plus it gets you thinking about regular expressions. Then you can go on to C++, Java or ruby for OOP.
That was the turning point of my life--I went from negative zero to positive zero.
What makes you fools think I'm not a chick? Plenty of ladies like 'em hot and young.
Just saying...
Employee Of the Month - Cyberdyne Systems Corporation - September 1997
Seems that every time BASIC gets mentioned on slashdot, everybody jumps to the conclusion that nothing has changed since GW-BASIC.
I was programming, professionally, with BASIC, in the early eighties. Never used a GOTO, or a line number, once.
Might also be worth mentioning that BASIC commands are also used in spreadsheets, and other applications.
who learned AppleBASIC, and COBOL, and FORTRAN, I feel the best 'beginner' language is still TurboPASCAL. It's basic enough for teaching concepts, and powerful enough to do advanced techniques before graduating to C++ or Java. If you want a language that's actually used professionally, there's always VisualBASIC, which again can teach you the basic concepts which you can then build upon.
Nothing to see here but us trolls...move along...
loop while( true )
screen.print( "Hello World" );
GRrr!! I typed Screen.print and it just gave me a stupid error! I hate this language!!!1!
"I like to lick butts!" by MobileTatsu-NJG (#32700246) (Score:5, Informative)
Why C? Because it allows the easy introduction of the mechanisms for expressions, evaluation of expressions, and looping constructs. Then when appropriate theory is taught, objects can be introduced using two of the most common metaphors by branching to Objective-C and C++.
Remember that C is dead simple as a language. Most of the perceived complexity is in the use of the optional libraries. When in a post introduction phase you need say, regular expression evaluation, or something like sparse arrays to match the theory you teach alongside the practical course (catch a theme here?) you have several well designed libraries to invoke. Want an advanced course in generative algorithms? Well, C++ templates can be a very powerful tool. The "C" family of languages covers basic applications level programming to constructs that allow code very close to the hardware.
Post learning C you have the tools to learn other languages without much headache. I love APL, but as a first language its a nightmare (unless you are an engineering, physics or math major and won't program regularly in the real world, then it's a perfect language! Unless you're in the US Financial industry where IBM sold APL and it still is going strong.)... And Dartmouth Basic is the basic to avoid, similarly RPG, and FORTRAN are right out along with COBOL. Each has a place (somewhere far away I hope) in the real world, and except for RPG I've made money on contracts for all of them. But as a beginning language they establish bad patterns of behavior and expectations. Where "C" falls down is that it takes a competent instructor. But I can write a bad program in any language.
Modern "Basic" languages are not "BASIC" as it was from Dartmouth and don't have a lot of the failings or foibles. Real Software has RealBasic which is an awesome cross platform tool, so write once execute a real self contained program on Linux, Mac OS X or Windows xxx. It has Classes and inheritance and mechanisms for interfaces. It has properties for the classes. It is not remotely related to Dartmouth Basic except in the use of Basic as part of the name. I'd recommend it if they'd actually fix bugs posted _for years_ by multiple people to the support forums. It is a nice product for user interfaces, and I still use it when cross platform UI is an issue. But write the backends in C++ sometimes as custom plug-ins. But it is not my first choice for teaching the intro comp sci folks. It is overly complex for a newbie. It requires an instructor that could separate issues from teaching.
Again C to start, object models in Objective-C and/or C++ then complex subjects from there as needed.
- Tjp
I am in wallow with my inner money grubbing capitalistic pig. ... Oink!
Get the kids Apple ][s so they can learn good programming:
* Use RAM and disk sparingly
* Integrate BASIC with assembly
* Write simple drivers and disk routines
* Learn telecommunications from the bit level
* Learn how spaghetti code sucks the life out of you
Logo, BASIC and assembly provide all the fun a kid needs. Well, maybe not all... but a good start to learning CS from the ground up.
Futurist Traditionalism
BASIC leaves you brain-damaged, Logo leaves you bitter and scarred inside. Perfect combo. 93.5% of kids benefit more from watching adult content more than being trained in this abomination.
Not to burst ClubCompy's bubble, but this has already been done, and VERY well, with the microsoft Kudo project (http://research.microsoft.com/en-us/projects/kodu/).
Yes, the technology involved in Compy has kind of a cool factor being all javascript, but the demos on the website run at a sluggish pace on my Core2 Duo. I agree quite a bit with the intention, but question its execution (disclaimer - I work in research dealing with serious games for education, particularly teaching programming). Just from what I see, this is far behind existing products already available, if not advertised very well. I'm just generally underwhelmed.
It also smells a bit of slashvertisement trying to meet the Kickstarter deadline.
I originally learned to programming on a Commodore 64 using BASIC. My second language was Logo on the C64. I have since programmed in over a dozen languages, and I don't think starting with BASIC harmed me. It's just a matter of learning that there are alternatives in the newer languages.
I do think that Logo is a better starting language than BASIC, since it has things like user defined functions and better list handling.
Yeah, I was disappointed that there's no PEEK or POKE or other more powerful commands to be discovered. Seems kind of limited to me.
So the *BEGINNER'S* All-purpose Symbolic Instruction Code, and a language created exclusively for educational use are great languages for demonstrating and teaching kids how to program? What a shocker. You "surprised" yourselves how/why? By having ridiculous notions that "any idiot" knows how to teach kids better than the experts who set out in the 60's and 70's to EXPRESSLY do just that ?
You've been suckered by language-purists, people who spend so long arguing about WHICH programming language to write something in that I could have written something in ten languages before they come to any conclusions whatsoever. BASIC is *wonderful* for teaching programming. I know, I've done it, from class-mates back in the 80's to modern-day kids nearly 30 years later. And yet my ENTIRE intake year for university sat through a whole year of Java lectures from a qualified professional and still didn't understand what half the statements they were using actually DID, while I didn't attend a single lecture and passed the course just by emailing in the assignments from home 30 mins before they were due. That's not to make me a genius, I was just taught properly, encouraged to learn, and started with simple tools - I wasn't forced to learn, by rote, a complex tool that requires deep understanding to know what it's actually doing. I started on something I *could* understand and progressed in steps. BASIC didn't corrupt me, it was a stepping stone that I outgrew.
When you teach a child to write, you don't teach a 2-year-old quill-calligraphy, or demand their first piece in iambic pentameter. You give them a crayon. If it hits the paper 3 times out of 10 you congratulate them. Then you progress to more advanced things as the need requires. But guess what? If you think that's the last time you'll ever write anything with a crayon, you're wrong. If you're still submitting your CV (resume) in orange crayon aged 30, you have a problem (the same as someone routinely programming important code in BASIC at the same level of experience). But neither should you go and hunt down a quill and parchment to scribble the note that says you're out of toilet roll.
Some people can't understand that BASIC is *excellent* for teaching. It was *designed* that way, and beats 99% of mainstream languages for that. But if your company is still running exclusively off it in 2010, it's a bit like sending out invoices in crayon. However, even in a modern office, sometimes you just need a tool for a small, simple job and sometimes BASIC works fine there (in the same way that scribbling "pay the caterers" in crayon on a post-it is perfectly acceptable as an aide-memoire). There are schools that, without a bit of BASIC, or shell-script, or DOS batch file, etc. wouldn't be filing their accounts, or importing the new student-intake data each year, I know that. When the job is once-a-year, with changing requirements, with specific needs, with various "mental hacks" that have to be applied anyway (i.e. "we need to drop column X this year if column Y is less than 20 because that old law no longer applies"), and needs to be done quickly it can happen in any language you like.
I have taught BASIC only a year or so ago, to a top-class prep-school student, in a single one-to-one session, in a single afternoon. That was from *zero* programming knowledge (but a keen mind), exclusively on paper and the next day they were writing (working) games and hadn't required a single extra tool, library, download, reference or command-lookup - we ran them through QBASIC to see them in action but they worked perfectly. I have also spent several HOURS trying to clean up a single function written by a top-class MSc CS-student that had only ever been exposed to Java in order to find out WHICH of the several dozen syntax errors, scoping errors, operator-precedence errors, etc. was actually the main cause of their function returning junk. I could have taught them a whole programming language AND done the same job quicker than I could teach them to d
No, it's a worthwhile comment. He could have phrased it more diplomatically but it is a useful thing to know.
C, C++, C#, Java, Ruby, Python, assembly... - these languages and all others are tools. They go in the toolbox and are brought out as needed. Each does something better than the others.
Were I to write a VM I would use C as well. A good way to think of C is "user friendly assembly". This is an excellent language to use for an interpreter. For a VM you want SPEED. So you need something with as little baggage as possible. It must be fast, and C has that going for it. After primary compilation it creates asm files. So why not go straight to assembly? A VM is complex. For something huge and complex ASM is a little too fine grained. You want C. So C was used. Best tool for the job.
Writing a gigantic user space application? C may not be your best bet. A lot of those types of programs spend a lot of time just sitting there waiting for input. You may not need anything that optimized. A big fat high level object oriented language can be a better pick. That's where Java/C# shine. You can do a lot with the fat libraries that go along for the ride. The UI creation is simple. Lots of bang for the buck.
Match tool to task and you'll make better software.
Weaselmancer
rediculous.
...but I question the merits of a language that doesn't implement FOR or WHILE. Loops are a pretty important part of a language, and having to implement them using GOTO is stupid.
BeauHD. Worst editor since kdawson.
everyone wants to raise their kids the way they were raised. The way they were raised was the best way simply because its the only way they know and as far as they are concerned, they were raised just fine.
Although in this case it should be easier to rate which one is better, i'd go for whatever language is easy for the childs age, they will eventually learn to detach the logic from the code after a few languages unless you are worried that learning another language will cause them to lose interest so hook them up on any language/system with a lot of visuals.
I think it really helps to use an interpreted language with an "immediate" mode (just type a statement and it is executed on the spot) if you're trying to get non-programmers interested in programming. The first two languages I learned (back in 1976 or thereabouts) were BASIC and FORTRAN. Of the two, BASIC was easier to pick up and (quite frankly) more fun, precisely because it was more interactive.
These days most of my "real work" is done in C/C++ and Python. I would argue that today, Python is a reasonable first language. It is simple enough that someone can easily learn the fundamentals and make it "do something"; yet it is also powerful and expressive enough to build complex real-world production systems with.
First programming language I ever learned was BBC Basic on an Acorn Archimedes computer. A fantastic language which was easy to pick up and start working with.
I feel very, very fortunate that I caught the tail end of the time where easy programming environments were bundled with computers, since learning those concepts at an early age is what has allowed me to learn the other languages I do now.
Surely it must be harder for this generation to really start programming, at least on the desktop, without such accessible environments?
I don't think people realize there is more to Logo than turtle graphics. It is essentially a dialect of LISP and has very powerful list processing and array features. And using property lists you can build data structures from it.
People have built binary trees and small personal database apps from Logo. While the data structure support isn't as powerful and flexible as what you find in C, Java or JavaScript, it is sufficient for a teaching language.
I think a Logo and/or BASIC for iOS and Android might be just the ticket to getting kids involved in programming. Fiddling around with turtle graphics on a mobile device in quiet boredom seems like something today's kids might actually do. (how long can you play Angry Birds before you need a break)
“Common sense is not so common.” — Voltaire
With classic screen-editor BASIC, you can just type in PRINT "1+1=";1+1 and immediately see the results. Once you've entered in a program, you can interactively do things like A=3:GOSUB1000 and try out a sub-portion of their code.
This sort of interactivity is completely lost in programming languages that have an edit/compile/run cycle, to the detriment of stark newbies getting to play around with the language and just "try stuff".
Lisp is my main development language. It and some of the other dynamic languages of today do keep that interactive prompt for the user, letting newbies play and letting seasoned developers test/debug very quickly. When it comes to being beginner-friendly, I think this interactivity with the language environment is the most important aspect, and it doesn't have to be tied to just "simple" beginner languages.
I know what you mean, I worked with boys at the CC level. HOT!
I started with BASIC, like a lot of hackers from my generation. Learned LOGO as well, then on to 6502 ASM, Pascal, 8086 ASM, all on my Apple //e! BASIC gives immediate feedback, and so it good for the beginner. I think starting someone on OOP or other advanced concepts from the beginning is a mistake, since students need a rudimentary understanding of basic programming concepts first, which BASIC and LOGO do very well. I guess I'm saying you can't understand the real power of modern OOP languages without doing it "the hard way" first.
Nitewing '98
Everything works...in theory.
I was one of those poor ruined youths deluded by BASIC.
Better to go with Python or Perl, imo. Not PHP...no need for that.
expandfairuse.org
Massive javascript attack. Also https by default.
You are being MICROattacked, from various angles, in a SOFT manner.
In my 20+ year career as a software engineer I made the most money writing Visual Basic code. Of course it was more professionally rewarding to do C, C++, ObjC, Java, etc... But, I definately got paid the most for VB applications in the financial sector. Funny, because I probably spent a lot more time mastering the other languages and their development tools than I did learning BASIC and VB.
I hunted down a pile of Commodore and Atari 8-bit systems in order to teach LOGO and BASIC programming to my two sons. The languages are immediate and responsive with a direct response to user input in a way far long lost in 'modern' development environments like Visual Studio 2010. The clear syntax of these two languages gives a child an easy path to comprehension that one command like: LEFT 34 makes something happen on the screen that you can immediately view.
The old "Hello World" sample application can be completed in 2 or less lines long in these languages. C++, C#, F#, VB.NET, etc... all fail to deliver such an accessible learning path, and that is why they fail to surpass 25+ year-old systems.
I believe that this approach has been a success. This year my eldest asked for the Flash development environment for Christmas...
The question should be: "Why not to teach Kids Programing with Basic". .....
JavaScript is more practical and useful.
I found a free HP48GX thang for the iPad recently -- made my day. Now I have two hardware versions, a 48 and a 48GX, a 48 emulation on my Mac desktop, and a 48GX in my iPad. I feel... "covered." :)
I keep HP 12Cs around in about the same places, too. That thing does an awesome job with loans and the like.
I've fallen off your lawn, and I can't get up.
I have been teaching my daughter to program over the past couple of years. Logo and turtle graphics were certainly good to start with. But there is *nothing* in BASIC that is easier/better/clearer/friendlier than Python with Idle. Ditch BASIC. Start your kids on Python. Go get the "Hello, World!" book by Sande and Sande.
Yes, I did my first programs in BASIC -- on an ASR33 with an acoustic coupler modem. This was *hot* stuff at the time. (The MITS 8800 and the ability to solder together your own computer was still three years down the road.) Stored my programs on punched paper tape. I loved it at the time, but sheesh already, let's move on.
I'd agree that interpreted languages (with BASIC and Logo being examples) are great for programming. The edit/compile/run cycle causes too much friction, discouraging kids from experimenting.
But having taught hundreds of kids programming, there's a huge difference between BASIC and Logo. Logo is a simple but powerful language that teaches kids how to express what they want to a computer. BASIC is a complicated but limited language that mainly confuses kids and teaches them loads of incorrect beliefs that make it hard for them to eventually learn to express themselves clearly. Certainly starting with BASIC can be recovered from (Dykstra was being overly dramatic) but I would advocate doing that to anyone on purpose.
Of the introductory languages that I've taught, I think that Logo was the best introduction, because it's the simplest, most natural syntax, with the ability to easily generate graphics that engage students. And while most people don't notice, Logo is a fully expressive programming language.
For comparable, but more modern languages that are good for introducing kids to programming, there is Scratch (http://scratch.mit.edu/), which is friendly and interpreted and visual. Also free and open source.
Reading the ClubCompy web site, they built something that is intended to be simple for kids to experiment, with no install, and thus is a "computer" interpreted in JavaScript. This seems like a nice idea. No real connection to BASIC or Logo, other than they want to achieve the simplicity and openness to experimentation that those languages represent. After giving it a look over, I like the fact that their language based on LOGO, but am not thrilled that they added LINE NUMBERS. I can't believe that it's a good idea to make kids learn about line numbers, with all of the associated complexity, rather than to use a simple text editor. The only reason that line numbers ever made sense is that back in the era when BASIC was invented, you couldn't assume a text editor, or even the ability to move a cursor on the screen (remember working on printing terminals?). But I think that limitation no longer applies. So while I like their goal quite a bit, I have a feeling that they would have been better off sticking with an existing simple language, such as python, lua, or even Logo.
Enable 3D printed prosthetics!
What do kids want? That's the first question, because you cannot teach children something they do not want to learn. For reference, see schools. If you want your child to WANT to learn, give him something he likes.
Now what do kids like? In general, at least in my experience, this can be summed up in a few key parameters:
1. They like things that affect their world. They like to see that what they do has some impact on the world around them. Ever been in a train where some child keeps pressing that "stop at next station" button at every single damn station because he loves to see how the train reacts to it? How it makes the train stop (even though it's more an indirect result of them pressing it)? Kids like to see that their world acknowledges their existance.
2. Kids like to show off. When they do something, they want to show that they've done it. That's one of the reasons kids like to draw, they can take that sheet of paper and show it around to everyone who wants (or doesn't want) to take a look. Later they might build something out of Lego or other things we give them to "build stuff" and we'll get to see what they built. So think twice before you buy your kid that Lego box, you'll have to admire the result!
3. Kids like the idea that they've done something by themselves. If you ever gave your kids some model kits, you know what I mean. They want that sense of accomplishment, that they have completed something and that they have done some "good work".
What I would hence suggest is not to "bore" your kids with programming languages that do not produce anything that affects their environment, anything they can carry around and show to unsuspecting relatives or anything you couldn't have done better. Especially when you're a programmer, your child will have a hard time stepping out of your shadow.
My suggestion, as radical as it may sound, to introduce kids to programming and computers in general, is microcontrollers. They are the perfect combination of everything above and has a few additional goodies: They give them something that will affect their world, provided they learn enough about them to, say, create some blinking leds or control servos with them, it gives them something they can carry around and it offers them manageable projects that scale well when their skill increases.
And besides programming, you teach your kids something about electronics, and once they learned the basics they can even start to create their own projects that actually have a goal they set themselves (important for kids, they are very hard to motivate for some abstract "learning goal"), and even small projects give them a great sense of accomplishment.
You can even program most of those Cs in C these days, though I would actually suggest (radical that I am) that they start with assembler. Odd as it may sound, I think kids would have an easier start with it, since they're not set in procedural and OOP thinking as we are, and in general C assembler is easy enough and straightforward enough without the baggage that weighs down i386 assemblers (there's rather little to take into consideration with Cs, they have very small capabilities). That way kids also learn automatically the foundation of programming, why there is a stack and what it does.
Yes, that will take them much longer to become OOP programmers. But kids have something we grown ups usually do not have in such extreme quantities: Time. When you start your child at age 10 with Cs, they have a decade before they have to be "productive". That's plenty of time for them to switch over to OOP and "higher level" languages later, and they will have a fairly easy transition, considering that Cs and assembler will have taught them a very important skill: Being observant to detail.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
The smartest programmers I've met are the ones who know their low-level stuff. Until you understand the nuts and bolts you're just a part-swapping-monkey.
I began programming in basic in 1980 on an HP45 at Sperry Univac. A few years later Pascal was being heavily used, and then around 1986 I started programming in C exclusively (as did large parts of the industry). I would have to say that it was a "steep learning" curve going from BASIC and Pascal to C. I am not putting forth an argument against you, but would like to suggest to start out with C for the main reason it would be so easy to teach programming with it. You don't have to teach pointers, etc. Just teach in C what you would teach in BASIC. For example:
main() {
printf("hello world\n");
}
In BASIC instead of 3 lines it would be one:
10 PRINT "HELLO WORLD"
Frankly I don't think it would be much harder to explain the C version than the BASIC version. Here is another example:
main() {
int a;
int b;
int c;
a=5;
b=7;
c=a+b;
printf("5+7=%d\n", c);
}
The above code fragment seems so simple to explain, I am not sure you gain much by teaching BASIC. Also it must be mentioned that the above C code is dirty on many levels, main returns void, no , etc. But, hey, it will compile and run fine the way it is (snicker).
A very good reason to start out with C is that if one desired to learn Java or C# as a progression the learning curve isn't as steep as the transition from BASIC to Java or C#.
Also I am not saying you are wrong in any way, I had a thought I think is interesting. Please keep up the good work !
I don't have my dog eared copy with me...
(but Newfies are big, smart, friendly, and loyal dogs!)
"Knowing everything doesn't help..."
I mean, after having them spend a couple of months:
only the most brave, geeky, girlfriend-less boys will be ready to join us....
Why can't
BASIC, you are fucked. It's not like that since I was interested in BASIC as a kid and did pretty well at it too. Then I moved on to C/C++/Java/Python/Perl and all that and I can code well. I think that it has even helped me to understand some languages like assembly more.
http://archeleus.com/blog
There is actually (at least) one use of GOTO in teaching. To wit: undoing the mess in someone's head some other teacher made teaching structured programming WRONG.
It goes a bit like this:
You will need: a dialect of basic that supports both GOTO *and* structured programming (I used BBC BASIC).
We can control program flow using IF and GOTO. We'll try some examples.
Now notice how you shouldn't cross your GOTO's, because that would be bad, and makes your code over-complicated. (That's what structured programming actually is!).
Now as it turns out, there's only really so many ways to do this, and we've given each way a name. So we can start by showing how GOSUB works, and PROC and FN:
GOTO {subroutine}:
REM return here
REM ...
REM subroutine starts here
REM ...
GOTO {line with return here}
Further we can show loops (REPEAT UNTIL, WHILE...ENDWHILE.).
REM Start loop ( "while")
IF NOT ({condition}) THEN GOTO {end of loop}
REM...
REM end of loop
Finally there is a common loop construct that shows up so often we have a separate shorthand for it:
I=0
WHILE I {some number}
I=I+1
REM do something
ENDWHILE
which can be shortened to:
FOR I = 0 TO {some number}
REM do something
NEXT
in really modern langauges like python, we can go a step further, for instance looping over an iterator.
arraylength=100 : REM some constant :REM don't forget your fenceposts!
DIM elements(arraylength)
FOR i=0 TO arraylength-1
elementToWorkOn=elements(i)
REM do something with elementToWorkOn
NEXT
which has been shortened (in eg. python) to:
elements=[]
# Fill elements here
REM ...
for elementToWorkOn in elements:
#do something with elementToWorkOn
(ps. sorry about the curlies. TIL slashdot treats BNF like HTML; also it messes with code formatting )
I've taught five groups of 8 to 15 "work experience" kids from local high schools, year 10 to year 12 (15 to 18yo), using http://squeakland.org/ Etoys. Most of them hate computing classes they do in school: learn how to use Office. I tell them the visual language isn't designed for them but kids 6yo and up. Then I teach them the simple car (turtle-like), the car with a connected steering wheel (functional programming), and then the car staying on track by sensing fences in about 40 minutes. Zero programming experience (in most cases) to environment sensing (I call it AI) programming in less than an hour.
One bright kid figured out how to spawn cars and managed to create a race.
Pick a good look at something modern like Gambas. All Basic goodies, in a GUI-friendly package.
Totally disagree. Iearnt basic back in the 80s - Im a Java programmer now, I dont think its hindered me at all.. Infact, i built a framework based around what I learnt back then, which I use in all my projects, and I challange any java programmer to write things as quick as I can nock up using it:
import static basic.Basic.*;
public class HelloWorld {
static{
Object[] pgm = new Object[1000000];
pgm[10]= print("Hello World");
pgm[20]= Goto(10);
run(pgm);
}
}
Out of nostalgia I was going to do a
10 print "hello world"
20 goto 10
But guess what?
10 print "hello world"
Error: Use single quotes (') for string literals.
Since when is the apostrophe used as string indicator in BASIC? When they started writing that error message, they should have stopped and thought "wait, we're going against every BASIC dialect in the world here, let's use ASCII 34 as string indicator instead".
At my uni, they assume we know no programming to start with and go from high-level to low-level languages. We start with Haskell, then Java, then C++ (and other languages). Couldn't this work for kids? There's nothing intrinsically hard about Haskell, assuming you have no imperative biases, and you learn all the good habits before you get to use a messy language where you can make stupid mistakes.
> 10 INPUT "Pick a noun: ",A$ ;" "; B$ ;"'s you!" ;" "; B$ ;"'s you!" ;" "; B$ ;"'s you!"
> 20 INPUT "Pick a verb: ",B$
> 30 CLS
> 40 PRINT "In Soviet Russia, "; A$
> LIST
10 INPUT "Pick a noun: ",A$
20 INPUT "Pick a verb: ",B$
30 CLS
40 PRINT "In Soviet Russia, "; A$
> RUN
Pick a noun: basic
Pick a verb: program
*Post clears screen*
In Soviet Russia, basic program's you!
> 5 REM Not exactly my old light cycle program after watching Tron back then but still fun!
> LIST
5 REM Not exactly my old light cycle program after watching Tron back then but still fun!
10 INPUT "Pick a noun: ",A$
20 INPUT "Pick a verb: ",B$
30 CLS
40 PRINT "In Soviet Russia, "; A$
> _ *blinking*
~~ Behold the flying cow with a rail gun! ~~
A very good language to start programing is Open Object REXX.
http://www.oorexx.org/
Easy to learn
Cross platform
Based on common English language
Great start for object-oriented programming
Like for so many others, BASIC was what got me into programming when I was young. It was easy to open up a game I just played, change a line and - whoah - it actually showed the change right the next time I started the program, even if it was just replacing a word or a variable to give me two extra lives.
The sheer ease of creating something myself without spending hours reading a wiki or creating a dozen "Hello World" applications was what fascinated me.
Does BASIC teach you things that are no longer used in modern programming? Absolutely. But any reasonably smart person should have no problem adapting and understanding that when moving on to another language, it does not corrupt your ability to work in other environments.
I started with the Psion Organiser II, more or less the world's first PDA. Amazingly, some of the stuff I wrote is still out there :-).
Personally, I think a device like that would be the best for teaching kids how to code, for a number of reasons:
1 - it is portable. You can play with it wherever you are, and playing is what is needed.
2 - it is always on. Resume wherever you left off (this is better nowadays - the Org II was singletasking, so you had to save code before you could do something else)
3 - it is a simple programming environment. OPL (Organiser Programming Language) evolved to add graphics, but at its most basic (pardon the pun) it was a sort of BASIC with touches of Pascal (procedures, subroutines, typed variable declaration) which made a distinction between source code and "translated" code to run.
4 - you could access the built-in flat file databases. It had a simple database mechanism that you could also reach with your programs, so you could mess around with the built-in database function. As a matter of fact, I miss this simple database mechanism in "modern" operating systems and PDAs, TapForms on iPhone is about the closest I got to it..
5 - it had growth stages. Once you got familiar with the device, you could progress to machine code, bit by bit. You could call certain functions, mess around with buffers - lots of stuff to play with once you knew the first principles. And crash recovery was a matter of removing the battery (which also taught you the importance of saving your work on the memory packs).
6 - it had expansion devices. I learned about barcodes because you could plug in a reader to the Organiser. There was a printer, a mag swipe reader - all this stuff taught me about the technologies we still use.
I agree that "modern" computers are too complex for beginners. I built an Apple II, sorry, ][ :-). I got my first PC because I was given one that was broken (so I learned about MFM drives), but I really got into programming (for a while) with the Organiser because I could change the way it worked to suit me, and it was always around. No need to boot, no great battery dependence (one 9V battery lasted for weeks), and it forced me to memorise structures because a 2 line 16 character display is a rather small window (the later 4 line 20 character display was luxury :-).
If there was a way to bring OPL to a platform like Android or the iPhone I think it would do a great deal to get kids going.
By the way, keeping structures in my head turned out to be a good exercise: it made the film "Inception" easy to follow :-).
Insert
The list handling is great if someone teaches you what it's for. I taught myself BASIC and Logo from the Amstrad CPC6128 manual, and later used that manual as a language reference to implement a Logo interpreter in Blitz BASIC on the Amiga - but I didn't bother with the list handling functions, because I couldn't see the point of them. It was only when I was taught SML at university that I realised how powerful they were.
...at all, in any language? Is this the modern equivalent of a previous century's idea of a good education, something like all kids should learn Latin and Greek?
I find an automobile analogy is called for: If someone wants to learn to drive, do you start by explaining the operation of internal combustion engine? Compression ratios maybe? Many of the problems programmers of a 'certain age' have come from trying to outguess the compiler/interpreter. A programming language should be designed to express the problem you want to solve, not how the particular processor will actually do it. Logo, for example, is a very long way from assembly code, but a useful teaching language.
The only real advantage to BASIC is that it allows for some very quick and dirty code to do some VERY VERY basic things. From that perspective, BASIC is better for showing simple concepts such as a "for" loop, or the use of variables. From there, Pascal is a good language to teach programming structure, since it is a bit more obvious about where the beginning and end of each block of code is for loops(begin/ends that are more obvious than {}). C of course has a similar structure to Pascal, but is a bit less verbose, meaning it can be harder to read, and you can miss a } and have problems with tracking down why something is not working properly.
The big issue is in the introduction to programming, and what is the best way to introduce CONCEPTS. Learning how to program when you are 12 or older would be a lot different than learning when you are younger. So, BASIC to teach some simple stuff early on, but then QUICKLY move to either Pascal or C to teach structured programming.
10 PRINT "BILL RULES "
20 GOTO 10
I typed some slight variant of this program into many a TRS-80 on display at Radio Shack as a youngling.
Almost every time I have found endless columns of code, even written in OO languages, it has always been the case that the programmer responsible learned programming with Basic.
In today's programming world it just teaches people bad habits that they carry across a career.
If you want a kid to learn programming on their own, outside of a class, send them to python.org where they even have materials for teaching programming. I don't know if the results will be better beyond starting them off with a modern language still in use, but the results can't be any worse as far as the bad habits of people weaned on Basic tend to go.
When the reality of bondage and domination of Java awaits all hapless initiates who go further into computer science? /sarc
Try Python.
In practice, though, it's not a big deal - everyone sane just uses spaces anyway
Really? Why? After all, tab is THE indentation character.
Is this about people who are too lazy to change their tab stops complaining?
Well fuck them.
Kodu isn't Code.
It's visual programming. It teaches something utterly different. The real brilliance of ClubCompy is the magazine- I fondly remember coding games from magazines, it's how I learned programming.
And they missed the Kickstarter deadline. Which is sad, because they offered something unique.
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
I'd argue that when you want to teach kids programming, the language is actually rather unimportant. It is the API and the IDE that matter. Have something that allows the kids to use graphics easy without a ton of initialization, have an IDE that automatically jumps them to errors in there code and all the little things like that. QBASIC was pretty good in that regard, it even auto-corrected the upper/lower-case when you mixed it in your variable names.
These days I would probably go with Python/Pygame or Processing as they make it easy to get interesting stuff happening. Python has also the advantage that you can do real stuff with it, when you are bored of toying around.
Actually, do you know how to do something like a Peek on a webpage?
"If character #427 on _____.com page is a 1 , then CanaryTest = True"
It would be a form of notification of sites being redacted to snip out the Bad Things.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
Squeak smalltalk seems to be perfect for this, Made by Alan kay!
I learned on C++ at 12 years old. I'd played with filemaker databases at age 10. I have looked at Basic but it never appealed to me. I think, having learned C++ at the time, it was far easier for me to learn any other language. 12 year old brains should really be able to think through logical steps towards a desired outcome. We need to stop coddling students!
Encourage kids learn a language that will be useful throughout their life. I don't work as a programmer, but I do use programming to solve problems on a daily basis, and I would hate to have to use basic.
-Jess
Aha!
Commodore 128. End Of Line
You could both draw lines and use built-in Sprites. (What other machine had native Sprites? I still don't know.)
I burnt out because at 12 I was writing racecar games, shoot-em's, and HuntWumpus-LORD crossovers.
I can still write little exercises to diagram problems I am pondering.
Then the minute I looked at C & Java the lights went off and I lost interest in being a pro dev. Today my interests are all about exploring existing apps.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
Got started with QBASIC when I was a youngin, wrote a rudimentary wireframe 3D renderer that worked at about 1 frame per second, and I've been hooked ever since. I always had problems with these early classes that I would go far beyond the assignment and get marked down for not following the instructions. Like in this Visual Basic class, we had to do this simple matching game, and I made Wheel of Fortune with Simpsons graphics and sound effects. DOH!
Exactly. Kodu teaches by indirect learning methods, allowing it to teach programming concepts without much programming syntax. By doing this, it can target a broader audience of children, possibly pulling in many who wouldn’t have been interested in programming to begin with. From interest sparked by Kodu, they can then begin to explore more detailed examples utilizing actual code through Scratch, Alice, or any other of a handful of tools that already provide a reasonable product and could use more funding.
Compy teaches with experiential learning methods, which generally isolate particular groups of individuals that already show a degree of direct interest, and can make it difficult to pull in others. Additionally, as noted above, it’s trying to step into a market that’s already starting to fragment, with a product that (from their website) appears to be very sub-par in comparison.
I completely agree with what they’re trying to do. I think it’s a good idea, in general. I don't think they offer something unique, just a slightly different way of doing something thats already being done. My opinion is that they need more research behind their approach to target the gaps that the other products are missing, rather than just taking a blind shot in the dark of “hey, I liked this when I was a kid”.
Goto provides for the natural expression of a state-machine. The most common example of that is in lexical analysis. [...] Some of the more dogmatic try to get around it by using a case statement in a loop (with an enumeration or something controlling the current state). But really the internal structure of the code flow there has nothing whatsoever to do with that loop, and artificially imposing that on it just obscures the state machine underneath.
And now you've just made a case for tail-call elimination, which turns each state into a function, and each state transition into a (syntactic) function call.
Are you adequate?
Malt liquor comes in different dialects?
I didn't find any joy in programming until I got to use real languages. Granted this was decades ago, but when I started with BASIC, Logo and Pascal, I found very little interest and certainly very little joy in it. It was clear they were toy languages and served no real purpose... and I was in the third grade or so. It wasn't until I was introduced to ACOS, then C that I found programming to be fun... because you could actually do something useful with it.
One could argue that you can do something useful with BASIC, but it was a chore if you wanted to do anything beyond crappy little programs that printed something on the screen. Paradoxially, perhaps, but batch files are also something that was fun to program.
If someone had wanted to introduce me to programming and get me interested in it BASIC would have been a total put off... it just happens that I was self-motivated and saw the possibilities in it, so found something on my own that would allow me to realize those possibilities. If it was externally directed, you can forget about it.
I would start a kid on PHP or something that's both simple AND useful.
You aren't allowed to use the knife anymore either. Too many kids are Terrorists!
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
Don't help him, he wants to bet allowed to sink.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
I dunno. Newcomers can be good at being told to ignore stuff in class.
I had grand fun with basic and then the first time I looked at Java the indecipherable cruft whacked me in the head and killed any interest I previously had.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
Yeah, for $1000 you can either get a new gaming rig or a credits mention.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
Teaching the Basic programming language as an introduction to programming is a step in the right direction but you really have to understand the point of the education system:
Produce a stream of young adults who are effectively brain damaged and in hock up to their eyeballs.
Now, I will freely admit that Basic accomplishes the brain damage goal of pedagogy, but let us not forget our obligation to saddle the zombies with debt that cannot be discharged by bankruptcy. Unless you charge thousands of dollars to turn young people into brain damaged zombies, how can you honestly call it "education"?
Seastead this.
Why poke around to break Ubuntu when an approved upgrade will do it for you?
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
The most important thing is a GOOD teacher. I don't mean a diploma and memebership in a union. From gradeschool on up to MS, I've had about six good teachers. I've had many instructors that were decent and tech savy. A good teacher will overcome any shortcomings of the books and tools.
It is very similar to Visual Basic with a nice IDE, but it is free (as in beer and as in freedom, under the GPL license), and works with Linux (it is included in major distributions). http://gambas.sourceforge.net/en/main.html You can easily make GUI applications (GTK, Qt) with the visual form designer (so it is motivating) while learning basic programming constructs (if then, while and for loops, ...) Later, you can use to teach more elaborate stuff like connections to databases (MySQL, PostgreSQL).
clone gets embarassingly "shot down in flames"?
http://it.slashdot.org/comments.pl?sid=1927208&cid=34689212
Hmmmm? Did Your big mouth and skimming get you into a jam again?? Absolutely. You tried taking on your betters, and your skimming and your stupidity did you in, promptly. How embarassing for you clone. It was totally hilarious watching you run away!
LMAO - Ah, now it's just going back to listening to "Lovely Rita, Meter Maid..." -> http://www.youtube.com/watch?v=l87Vvb7JcDU
Lisp failed [...]
I'm not convinced that that is the case. Various Lisps (Common Lisp, Scheme, specialized dialects used in particular applications, and other varieties) continue in a number of important uses in production environments, continue to be actively developed, and Lisp features continue to be one of major influences on the evolution of many popular languages as areas that have long been noted as Lisp strengths become recognized as important in modern application development.
How, precisely, is that Lisp is supposed to have "failed"?
http://it.slashdot.org/comments.pl?sid=1927208&cid=34689212
Hmmmm? Did Your big mouth and skimming get you into a jam again?? Absolutely. You tried taking on your betters, and your skimming and your stupidity did you in, promptly. How embarassing for you clone. It was totally hilarious watching you run away! There will be NO burying this clone, for your trolling others here repeatedly. Time to put the shoe on the other foot now. You like?? LOL!
clone gets embarassingly "shot down in flames"?
http://it.slashdot.org/comments.pl?sid=1927208&cid=34689212
Hmmmm? Did Your big mouth and skimming get you into a jam again?? Absolutely. You tried taking on your betters, and your skimming and your stupidity did you in, promptly. How embarassing for you clone. It was totally hilarious watching you run away! There will be NO burying this clone, for your trolling others here repeatedly. Time to put the shoe on the other foot now. You like?? LOL!
http://it.slashdot.org/comments.pl?sid=1927208&cid=34689212
Did Your big mouth and skimming get you into a jam again?? Absolutely. You tried taking on your betters, and your skimming and your stupidity did you in, promptly. How embarassing for you clone. It was totally hilarious watching you run away! There will be NO burying this clone, for your trolling others here repeatedly. Time to put the shoe on the other foot now. You like?? LOL!
I learned Basic on a Commodore VIC-20 in 1978. I think it is a terrible choice for learning to program. I suggest newbies learn Scheme, a very simple language that will lead you as far down the rabbit hole as you are willing to go.
I learned BASIC, approximately in parallel, on the VIC-20, the TI-99/4A, and a Timex-Sinclair 1000 in elementary school in the early 1980s.
I think its a fine language for learning to program as part of learning how computers work; its high-level enough to be accessible, especially to young students, but structured similarly to assembly languages and provides a good vehicle for teaching about how computers work at a basic level.
I think Scheme is a much better language for teaching how to design programs to solve problems, but the features that make it good for this purpose are precisely the features that obscure the low level process.
Since no one else seems to have mentioned it, I'd like to add a vote for the Netlogo agent-based simulation system as an excellent tool for teaching kids programming. It's not open source, but is free and available for most platforms, has excellent graphics, an easy UI builder, and can be extended with Java code if more advanced functionality is required. I use it off and on to prototype simulations for work, and have found it excellent for many purposes. Last summer, my son expressed an interest in learning programming, so I pointed him to the Netlogo site. Soon he was happily working through the hundreds of examples included with the package, and has since developed some pretty fancy simulations for his school science classes. Netlogo encourages such experimentation, and unlike more powerful languages, allows kids to quickly build useful programs that include fancy stuff like graphical displays, charts and graphs, and complex GUIs without having to do a lot of low-level programming. Take a look....this is NOT the simple logo we all remember from decades ago.
http://it.slashdot.org/comments.pl?sid=1927208&cid=34689212
Hmmmm? Did Your big mouth and skimming get you into a jam again?? Absolutely. You tried taking on your betters, and your skimming and your stupidity did you in, promptly. How embarassing for you clone. It was totally hilarious watching you run away! There will be NO burying this clone, for your trolling others here repeatedly. Time to put the shoe on the other foot now. You like?? LMAO...
http://it.slashdot.org/comments.pl?sid=1927208&cid=34689212
Hmmmm? Did Your big mouth and skimming get you into a jam again?? Absolutely. You tried taking on your betters, and your skimming and your stupidity did you in, promptly. How embarassing for you clone. It was totally hilarious watching you run away! There will be NO burying this clone, for your trolling others here repeatedly. Time to put the shoe on the other foot now. You like?? LOL!
I second that: PHP (from the command line) would be a great language to learn. Uses simple text files, no compiling, reasonable error messages, and it is enough like C/C++/JavaScript/Java that a person could transfer most of their experience into any of those languages.
The same reason we teach kids math. Teaches them to think for themselves and to understand exactly what their graphics based editors are doing for them. Or at least get their mind to a point where they can think openly and creatively.
"Instant gratification takes too long." - Carrie Fisher
http://karel.sourceforge.net/ Technically my first exposure to programming was a loop in BASIC that printed hello world, however, I was fond of Karel as my second encounter with programming. It has a very small instruction set (prevents kids from being overwhelmed and forces them build more tools with procedures) and can keep their interest because it is a game/puzzle.
> I actually did think for myself when I rejected GOTO. I actually went back and read the "GOTO considered harmful" essay.
>
> Can you provide an example of when goto is appropriate -- in particular, when it's appropriate to use a goto rather than actually structured
> programming, or even a safer option like break, return, or throw?
When you're telling the CPU what you want it to do ?
Show me an object orientated CPU
Show me a CPU without a jump instruction
-- kjh
When you're telling the CPU what you want it to do ?
In what sense?
I'm telling the CPU what to do when I type here, but I'm certainly not giving it a jump instruction, or any other instruction, manually. I'd have to be insane to do so just to type up a Slashdot post.
Now, if I needed assembly for some reason, yes, a jump instruction becomes relevant. I can't remember ever needing assembly for anything.
Don't thank God, thank a doctor!
Your assertion that Python travels well is a strong point.
Visual Basic and VBA have very accessible OO environments, but mostly over MS Windows. Which is a serious limitation.
Reviewing this thread, I think that the capability of writing lucid code was the key feature I was trying to advance. If you can name wisely and have the basic syntax of the language, even if purposely verbose, read like pseudo code then I think we're on the same page.
"Knowing everything doesn't help..."
BASIC isn't standardised in the same way as many programming languages, so you can't lump all BASICs together and criticise them generically. For example if you are in the 'GOTO considered harmful' camp (which I am) you may disapprove of those BASICs in which GOTO is unavoidable, or at least encouraged. However other BASICs positively discourage the use of GOTO, notably BBC BASIC. In nearly 30 years of programming in BBC BASIC I've never used a GOTO (except in programs designed to test that GOTO works!).
BBC BASIC was designed quite specifically to teach programming, as a key part of the BBC's Computer Literacy Project of the early 1980s. Advice was sought from academics of the day on the features the chosen language needed to have, and being sufficiently well-structured that GOTO can be entirely avoided was a central requirement.
As recently as 2006 BBC BASIC was chosen by Portsmouth University as the language to teach in the Introductory Programming Unit of their Engineering Foundation course.
Just tried your system out. Found a few bugs.
I coded an infinite loop. Then I typed "run" and then I realized that there doesn't seem to be anyway to halt a program once it is running. There must be a big red octagonal button on the screen with the letters "STOP" in it that actually stops the program.
I tried to code an IF statement. I had to look up the syntax because "if i 0 then goto 2" got a syntax error. I can almost forgive using the C like "if()" for the if statement but using FORTRAN like "LT" for "" is pretty nasty if you ask me.... But, you didn't :-)
You have a "declare record" statement when just "record" would do. Using "declare" make sense if you are planning to add more things to declare, otherwise it is just a waste. And, seriously, no "for .. next" statement, no "if ... then ... else..." statement, no while statement, no multi-line statements at all. I see that you have reserved some keywords for those so it looks like you are planning to add them in the future. Please, these are critical parts of any language. I know for a fact, having done it, that it is f(&#$@#*$&^King easy to implement those compared to some of the things you have already added.
I tested what would happen if I typed "run" for a program that has a syntax error. It went away forever. No error messages, no output at all. It just stopped reacting to the keyboard. This is a serious bug.
The documentation is really really really poor. Very few examples. No real introduction. You use things like "boolean-expr" but do not define that anywhere it the document.
"turn" is great, but you need left and right also. Kids understand left and right. Positive and negative angles are a bit harder for them.
Palettes? Really? It is very hard to find a computing device that can run a modern browser that is not using RGB pixels. Why put this ancient cruft in the way of kids? Color values are RGB in the range 0 to 1. There are no palettes anymore.
Sprite maps? Nostalgia is an addictive drug, but like all drugs it is damaging when used to excess. Why not just have a place on the screen to browse and drop graphics that can then be used in your program?
I've written an ANSI standard BASIC compiler, I've written a Logo interpreter (or 2 or 3 :-), and I've taught courses in which the final project was a Lisp interpreter. In fact, I've written many compilers, interpreters, and even a linker once. I've also used both basic and logo to teach kids aged 5 to 12 to program. And, I have to say that while you have a good idea your implementation is far from ready for use by kids if I can break it in 5 minutes doing exactly the kind of things kids do.
It looks to me like you have focused on the "cool" parts, the graphics and the math library, but have skipped, or at least skimped on the critical part. The critical part is creating a system that works, followed by the documentation needed to use it.
BTW, WTF is "proof" for? It is left over from back in the day (your nostalgia is showing...) when you actually had to type in code that was published in magazines. OMFG!!!!! We live in a world where magazines have websites (in reality a few websites still have magazines) and flash drives are nearly cheap enough to show up in cracker jack boxes (yeah... I'm old, I learned Basic and Logo on an Univac 1108a :-). We do not do that anymore!
You have a good idea. But, shake off the nostalgia and make something that acknowledges the 21st century.
Yes, I know I have been harsh on you. If I didn't really like the idea of what you are doing I wouldn't bother to find the flaws, let alone spend the time to point them out.
Stonewolf
P.S.
I've recently managed to eliminated the use of paper in all the classes I teach. Doing that has really pissed off the English teachers who still insist on paper and give tests using blue books.
You're spending too much time on /.
How funny! I just did the same thing!
--- wad