Learning Programming In a Post-BASIC World
ErichTheRed writes "This Computerworld piece actually got me thinking — it basically says that there are few good 'starter languages' to get students interested in programming. I remember hacking away at BASIC incessantly when I was a kid, and it taught me a lot about logic and computers in general. Has the level of abstraction in computer systems reached a point where beginners can't just code something quick without a huge amount of back-story? I find this to be the case now; scripting languages are good, but limited in what you can do... and GUI creation requires students to be familiar with a lot of concepts (event handling, etc.) that aren't intuitive for beginners. What would you show a beginner first — JavaScript? Python? How do you get the instant gratification we oldies got when sitting down in front of the early-80s home computers?"
I wanted to try something new, and guess what Visual Basic 2010 express, so in a post basic world I am checking out the newest MS basic
its not the end all be all for everything, but its letting me whip out simple apps for windows which I am thankful for at work
And why doesnt BASIC still work? Any reason they can't still use BASIC?
Off the top of my head, three languages and platforms with which one can quickly produce GUI based apps. Android's Java is very approchable and you can do your "hello world" type app in a few lines of code. Likewise, Flex (aka Flash for apps) is for lack of a better word, flexible and lets you use a nice combination of Actionscript and XML to build apps quickly. And finally, Objective-C is very user friendly and can be found bundled with OSX or you can get a copy of Borlands C++ Builder.
"Have you ever thought about just turning off the TV, sitting down with your kids, and hitting them?"
It's lightweight, portable, and has a ton of interesting projects for learning. Start here at http://www.ruby-lang.org/en/ Check out the "Try Ruby in Your Browser link" on the right hand side.
Agile Artisans
wxWidgets and Python are a good combination of easy to learn and visually satisfying results. The later being for positive reinforcement. Oh. And using it to write more practical programs in the future isn't hindered by a boat load of patents.
Having to work for a living is the root of all evil.
... (ba)sh? ;-)
I reserve the right to be wrong.
HTML4 is super easy, any middle-schooler could start there. Branching out to some client-side javascript is a cakewalk, and PHP from there is a pretty sort jump and surprisingly powerful. If you want to do some 'real' programming, SDL makes the GUI side a lot more accessible.
Beginners should not start with creating GUIs in the first place. (Neither did early BASICs support such a thing)
CLI paste? paste.pr0.tips!
http://ask.slashdot.org/story/08/07/22/0452225/How-To-Encourage-a-Young-Teen-To-Learn-Programming
http://ask.slashdot.org/story/10/07/30/2150208/How-Should-a-Non-Techie-Learn-Programming
Someone should keep track of them. Maybe stash them in some "Learn to Program" folder on Slashdot?
I'd say go for the JavaScript. The learner already has the instant gratification of an HTML document. Then add a button whose onclick handler changes the button's value to "Hello World".
How is event handling unintuitive? "When this happens, do this and this and this."
Python or JavaScript or whatever maybe be currently in vogue but the act of programming transcends languages. Just pick one and do it. Python can be used with or without the "back story" depending on what you want to do. Once you are in the GUI world it is pretty much all back story.
Palm trees and 8
http://processing.org/ it's easy and gives immediate gratification.
It all starts at 0
Google it. Especially if you like the Sims, try the 3.0 beta. Other than that I'd second HTML + Javascript. You can very quickly get up an running with something fun and interesting.
Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
Learn electronics, then learn assembly language. You do it in that order to prevent brain damage. Then you learn C. Again, no brain damage.
Then you get a job and don't touch another language for the rest of your life. You'll get enough brain damage from the drinking you'll need to do to survive as a programmer.
The only thing it will do for you is give you serious brain damage. Python is widely recommended as a good starter language that is also good as a serious language. Following from that you can easily branch to Perl, Ruby, Haskell, even C (which I recommend learning after Python if you can).
Alright, so I'm willing to accept that this is a strange position to take...but if I was asked to teach my girlfriend to write code, the first thing I would do would be to try teaching her Powershell. Powershell, for those of you who have never heard of it, is a sweet scripting language introduced by Microsoft in Windows 7 (although it is available for Vista and XP). I've heard it compared to Perl a bit; there's dynamic typing, little scope, and access to the lion's share of the usefulness of the .NET framework. I figure that if I gave her some of the basics (here's how to do some math, here's how to do string operations, here's how to find more information about this stuff) she'd be able to use the built-in help (it can be used as a command line or in an ISE, both installed by default in W7) and my advice to get her started. I just find PS to be incredibly simple to write in- not the command line stuff or their cmdlets so much as the basic math/string/IO crap that I find myself doing most of the time.
Personally, I find VB.net a good choice for learning It's easy to use and gently teaches the fundamentals you'll use in all object oriented programming. Visual studio does most of the heavy lifting for you allowing the GUI to be drag and dropped into place. Double clicking on a button creates the event for it's click. Once you start building your app you can get into objects and events at a slow pace while focusing on the basics. It also has extremely forgiving syntax compared to many other languages. I've had to learn coding twice... 10 years ago I started coding with VB5 but ended up doing support instead of development so it had to put it away. Now, my support career has come full circle and I'm helping build the software I've been supporting this whole time. 10 years later I find myself re-learning all the basics in VB.net.
I can fault MS for a lot of things, but C# is nice, and their interface builder is a piece of cake that takes the agony out of building a UI. I'm pretty sure that Hitler and Stalin are building Java UIs by hand right now...
You could always get a Commodore 64 and learn BASIC on it. But what an awesome project that could be for an IT class. Find a PC at least say 15-20 years old and write a program on it.
I like the approach taken by the Hello World! book. A nice introduction for beginner programmers to python and eventually gets to GUI stuff, which I never got to do with BASIC on my TRS-80 back in the early 80s...
and some kind of canvas to draw stuff to.
I think the language doesn't so matter so much as the time that is put into it. In the summary basic was given as an example, and I'm sure the basic he's talking about isn't considered good code these days. No object orientation, plenty of gotos and so on. The thing is he spent time on it, and from that language went to others.
With this in mind I would say that today there are plenty of good starter languages. My suggestion would be python, which introduces a number of good habits. It also has the advantage of being able to import loads of goodies which allow graphical programming.
Another suggestion is Delphi Pascal or C-Builder which allows you to quickly create windows applications. I hear that Microsoft has something similar with C#.
Any language is good, as long as time is spent playing with it. That's the thing that is important.
It's got that same instant gratification that I remember from BASIC, while still teaching some of the logic, structure, and syntax of C++.
Python. Or Ruby, if you wanna use why's poignant guide. I'm not going to say there aren't superior alternatives -- JavaScript would probably showcase the immediate applicability of programming better -- but those two stand out to me as languages in which you don't have to get caught up in overhead, you don't have to explain a lot of stuff right off the bat, you don't have to say "ok, ignore these statements for now", you can simply start off with a one-liner and work your way up from there.
Ruby. The correct answer is Ruby. Seriously.
brainfuck
I've never met a programmer that did not end up being better at their craft after spending time writing Ada. Some did not like it and shun it but even they seem to be better programmers in their language of choice after using it. (Though of course it is not magic and if you are not cut out to be a software developer, it is not going to fix that).
--- Liberty in our Lifetime
Ruby.. easy to learn.. lightweight.. works on most platforms.. etc..
I recently heard (though not used) about Alice, which sounds interesting for at least introducing programming concepts.
// file: mice.h
#include "frickin_lasers.h"
Use GIMP, ray tracing, games or any other interesting visual environments first.
Then use the language embedded in those environments as starting point. In otherwods, do not create a notion of a 'program'. Instead create a notion of 'tasks/logic' that are needed to do something interesting (and visually rewarding).
Just use BASIC, or an older version of VB(VB3 comes to mind). Simple, little required in the way of GUI(even VB3 is extremely simple with GUI), and enough to teach the basic concepts. The fact that they're old doesn't mean that they aren't useful.
Got that cute turtle. How can you go wrong !! (Don't put it in your vita !!)
"How do you get the instant gratification we oldies got when sitting down in front of the early-80s home computers?"
By using a language that has lasted through that time to this one: Fortran.
Fortran is still one of the most widely used languages in scientific applications, and is a great starting point for beginners.
Yeah, so day one you're not going to put together a GUI. Is it that big of a deal? You're not going to be programming the next big FPS in two months either. I know it sucks to hear this but it's true.
Dumb little programs like "Hello World!" serve a purpose. If people with an interest in programming didn't think they were going to jump right in to making a functional program that served some greater purpose there would be a lot less let downs. Your average Sam's "Learn [insert language here] in 21 Days" book isn't going to get you writing any new and innovative code. It's there to introduce you to the basics.
Sorry guys but it probably takes *at least* 100 hours of banging out dumb little programs to get to doing a program that actually does something productive for you and even in that case there are probably 300 programs that are doing the same thing out on some programming tutorial site.
I really don't know what people expect out of their first few hours of coding. It's going to be limited. It's not going to produce anything useful. If you're not satisfied that you got it to work, you're not going to be satisfied by anything else in that starting stage.
DarkBASIC is BASIC with DirectX bolted on, I wish schools taught with it.
Massive instant gratification.
When I was a kid, the computer i programmed for (trs-80), was one of the first computer I ever saw. There were not that many programs for it. So it was easy to get excited about almost nothing.
Now all the kids have been exposed to all sort of technologies. They'll never get excited by very simple things like I have been. The thing to remember is that it will never be has rewarding has it was at the time for such simple things and no language is going to change that.
In my experience backstory is important to put languages and learning in context. A lot of students are just running head-long into Java but if they started with C++, and were explained why it's important to start with C++, then many of the OOP concepts would come more naturally when learning something like Java. Then things like Python or PHP would come like second nature since their more complicated aspects are the OOP concepts they implement.
I think a main problem in making programming fun is that it's always so monotone and repetitive. I say if you learn OOP concepts when learning C++ why re-learn those concepts when learning Java? Get to the good stuff! Teach about what is unique to Java, the syntax difference, and move on! That's what we do at http://wibit.net/ and it's working for us.
Otherwise I'd say there is just a lack of creativity overall in programming learnin'. It's always the same "Hello World" projects teaching you how to build a Fibonacci sequencer or a tic-tac-toe game. Let's get real about this stuff and get linear and highlight the fun parts of development for the kiddies! Again, that's what we do at http://wibit.net/
Python has always been trivial to get started in. I taught my 9 year old to program in python in a few hours.
Java is easy to use, and the syntax is clean.
C# is basically a clone of java, so the same applies there.
You don't need to learn object orientation to use any of these languages. Sure, you probably SHOULD, but you can learn java programming solely in the main() if you just want to learn the basics. Even moreso with python, you can program in the interpreter at first, then move to running the code from files, then later migrate into an object oriented approach.
- Vincit qui patitur.
To start with, teach PHP and HTML. These are good ways to get people used to the idea of GUI design and basic programming without needing to worry about complex event handling. When they are ready to move onto this you can introduce JavaScript and database integration through MySQL.
HTML/CSS takes care of the looks, and you learn about functions using PHP. It is easy to set up something 'live' that people can play with.
Throughout this they will be learning elements of C-based languages and it will make the transition to C++ and other languages that much easier.
I am teaching a friend the basics of programming, and Python is what I have chosen. Books such as Learn Python the Hard Way [found its ref on StackOverflow, and liked it] are very good for someone who wants to learn programming on their own time.
That said, I think a lesson in the basics of flowcharting (inputs, outputs, conditionals, loops using counters and conditionals) goes a long way to prepare the student for programming languages.
HTML/CSS+JS is relevant given
The above is from feedback from my friend. YMMV.
-A
"- What's so unpleasant about being drunk?"
"- You ask a glass of water."[from h2g2]
Have them learn LISP.
"The mind works quicker than you think!"
If anything, the post-BASIC world is far, far, better supplied with both explicitly pedagogical languages, application-specific rapid development tools(Processing, for instance), and fairly mature options that allow you to do anything from what is essentially shell scripting to full application development.
However, you run into the rather messy problem that off-the-shelf examples of software have(both in terms of software complexity and in terms of ancillary stuff like graphics and sound assets) Vastly increased in number, sophistication, and availability. This makes it harder to engage any would-be-learner who isn't explicitly interested in programming by sucking them in with the cool results.
Back when daddy borrowed the company Compaq Luggable so that he could work on spreadsheets on weekends, your choices for computer entertainment were pretty much "Lotus 1-2-3" or "Make your own damn fun with basic". Option two was pretty attractive even if you really just wanted some games and only became interested in what made them tick later.
Nowadays, when we have all removed the onions from our belts, hypothetical kiddo is enormously better tools and documentation at his/her fingertips; but is also comparing the rudimentary results of a beginner against products of 2-3 years of effort by a professional design team, backed by artists and sound guys, available for 20-50 bucks off the shelf. Even the sort of flash games that will load about as quickly as the Python 3.2 reference manual will are comparatively polished and intimidating.
Arguably, it might actually be better to start beginners out with more physical projects: Sure, robotics has also increased enormously in sophistication and power; but high end robots are still expensive and uncommon, and there is a more visceral "wow" factor to "Hey, I hammered out the feedback logic that allows my little *duio bot to follow lines" than there is to "Oh, I've just produced 10% of Zork; but less witty and 25 years late. Let's go play Medal of Life Half-Gear Assault 2011."
Grab a TI calculator. Learn the slightly weird version of BASIC installed on them. That's where I got my start.
You can write an actually useful program in just a few lines. It's got a few simple data types (floats, strings, lists and matrices), has a few basic functions (Disp, Input), and all the common language constructs (If-Then-Else, For, While, Goto). There's a few oddities (assignment is reversed, instead of "a = 2" you have "2 -> a"), and there's no proper way to declare a function (you can either make another program and call it, or use goto), but you can do a surprising amount with it.
I programmed those for a year or so. Tried learning assembly to get around the limits of Basic (mostly the speed), couldn't do it. But I did get into C++, and later all the other "real" languages, and am now pretty much a real programmer.
Both JavaScript and Perl scripting languages have a strange nuance that can be difficult for beginners to grasp. I am in computation neuroscience where you get a lot of non-programmers. The flow of Matlab -> Python -> C++ seems to work the best. Where Matlab is only necessary for a semester before moving on. People will stop on the language that suits them the best.
When my daughter is old enough I think I will introduce her to the applescript gui tool - where you can simply stick together existing applications into small macros, where the output of one application is piped into the input of the next. It is like visual shell scripting...but even simpler. You can include your own more complex shell scripts as steps in the overall script and really go nuts with it. I'm sure I'll get flamed for this, but to me it is a great way to introduce a (very) young person to the concept of input, output, and the foundations of procedural programming.
I have heard the argument that functional languages should be used to teach young minds how to program, but I just don't think a very young child would grasp the recursive nature of it.
while [ 1 ]; do echo -n -e "\xe2\x95\xb$((($RANDOM&1)+1))"; done
Microsoft makes a free beginner's or kid's version of visual basic called Small Basic. It's a Visual Basic .Net compatible version with a subset of the full Visual Basic command set. It's really good for a young person to start out with and the programs created will work in the "Grown-up" version. http://msdn.microsoft.com/en-us/beginner/ff384126.aspx
Pretty easy to use and damn powerful....
With the understanding that I have no knowledge of this language outside of it's name... How about Haskell? :P
I learned BASIC first. When I was shown LOGO, I wrote a few lines of code to draw a Sierpinski triangle, and thought to myself: there is no fucking way this can be this simple. It worked, though, and sure got me to appreciate the weird academic languages.
Tsunami -- You can't bring a good wave down!
A kid who isn't satisfied with very basic accomplishments is one who will never have a shot at writing a 3D game. I had to explain this to a younger guy the hard way a few weeks ago. It requires real work, drive and willingness to learn. If you can't delay gratification or find gratification in simple accomplishments along the way, you're not even a candidate for success.
MIT's Scratch ( http://scratch.mit.edu/ ) has gotten my kids started with programming. It's fun, and teaches all the fundamentals necessary for learning programming logic.
I know it's a bit limited to Mac uses, but Carbon in xcode.
Free, Simple to use, available on most of platforms, Open source. Although you can do objects and methods, it doesn't force you to do it that way. Easy I/O, and good debugging.. Lots of free extensions available (FTP, Sockets, concurrency, Windows GUI)
Sorta. I dunno about others, but what got me interested in programming when I was a wee little lad was that I could make something fun and immediately see the results. All games on my parents' old ZX-81 with 1K RAM (yes, 1024 bytes of RAM, total) were really far more primitive than your typical cell phone game these days. It wasn't hard to get ideas like "I can do better" and actually do so. I actually invited a few friends to play my own primitive strategic bombing "simulator", and they actually found it fun.
But therein lies the rub. It wasn't just the possibility to use BASIC as such. BASIC was just a tool, and the Sinclair BASIC was a piss-poor tool at that, being easily the slowest BASIC of that era. I actually "graduated" directly to machine code after a year, because ZX-81 basic was just too slow, and 1K RAM wasn't enough to run an assembler or compiler.
What mattered was seeing some fun results.
Think of it, dunno, like the quests on WoW. Nobody would run across half the continent and back just for the sake of running across half the continent and back. But throw in a reward, and it becomes fun.
Similarly, nobody learned BASIC for BASIC's sake, and I can assure you that nobody who's not terminally schizophrenic would do something as horrible as converting assembly to hex codes by hand, just for the sake of converting opcodes to hex codes by hand. We did it for the sake of seeing some results at the end.
I'm not sure most of the BASICs around can work like that. I most certainly wouldn't have learned BASIC for the sake of programming a fucking spreadsheet or a Word macro. When you're a kid and do that in your free time instead of playing something or hanging with some friends, if your dream in life is to make a better spreadsheet macro, you need professional help. Plus, it's not the kind of thing you can brag to other kids about.
But I think all is not lost. If I were to get some kid interested in coding these days, I'd get them a moddable game. Scripting a new NPC or quest in Fallout New Vegas gets one a tangible reward in a reasonable amount of time, and some bragging rights after you upload it to a couple of mod sites. Or there are several games that are scripted in Python these days, which also has the advantage of being a skill you can take with you to the next game that uses Python for scripts.
A polar bear is a cartesian bear after a coordinate transform.
Check out MOO code. A MOO is like a MUD (remember? The text based RPGs of yester-year?) MOO code offers instant gratification as just a few lines of code can produce something that the beginner user can use right away and see that their adventure in to coding can see immediate results. The syntax is somewhat easy to follow and I've found that learning MOO gives the user a basic understanding of code allowing them to read (not necessarily code in) just about any language.
I too started with basic in middle school but it did not teach me much. In high school we did fortran, which taught me mad skills, then I taught myself C and C++. I still think C is important for people who want to do serious programming as it does not have the cruches of the other languages, is simple enough to be put in a two hundred page book, and will teach everything one needs to know about debugging and basic design.
In terms of instant gratification, I would suggest writing web apps in python. Most of the GUI stuff is taken care of by the browser, Python takes care of parameter passing to and from the user, and one can teach all the concepts, aside form parralel programming. A kid can write any number of games and if one has access to a web server, it can be run anywhere there is internet access. Such a thing can be great motivational tool.
"She's a scientist and a lesbian. She's not going to let it slide." Orphan Black
I got my start in BASIC when I my mom bought me a book on the topic. However, what really got me into it was modifying games. At our school's computer lab we had a set of games created in BASIC. I would get into the code and make modifications to these games. Back then everything was simple enough I could find my way around as a kid. It was also simple enough I could look at the code, compile it and run it all on one machine without the need to download a bunch of software. I have no clue how to recreate such an experience in today's world.
A unique way to learn a language: http://languageloom.com
Did you say Python deliberately to sound cool around ./? Nobody uses that, except the crackpots at Google. Another unique endemic weirdness is Perl -- used exclusively by Slashdot. Normal people use PHP. I thought you weren't trying to sound cool.
It's still important to get a good base going I think. Start with languages that did it first and understand the concepts then you're in a better place when you get to the more complicated functions.
http://wibit.net/
There is Small Basic from Microsoft. http://smallbasic.com/
From the website FAQ:
Who is Small Basic for?
Small Basic is intended for beginners that want to learn programming. In our internal trials we've had success with kids between the ages of 10 and 16. However, it's not limited to just kids; even adults that had an inclination to programming have found Small Basic very helpful in taking that first step.
You should definitely look at Scratch, which is designed for kids, even (especially?) kids who don't type very well yet, yet it teaches them programming skills. This is the same crowd who initially did Logo all those years ago, and they think this is better...
- "History shows again and again how nature points out the folly of men" -- Blue Oyster Cult, 'Godzilla'
I agree, and starting with a less pleasant language might weed out those who don't really have the aptitude for programming. Personally, I started with a mid-70's programmable calculator, and went from there the Fortran. If I'd started with C# or something easy like that I might not have become the programmer I am today.
Last I heard, PowerBASIC was still going strong.
a real student will just do everything in assembly to learn about computers and to program. Only the garbage coder will learn using C# or some other BS language.
"The laws of science be a harsh mistress." --Bender
It seems like a version of this comes up on /. at least every quarter. What does it say about programming that so many people look back at BASIC with a mix of nostalgia and disdain? What paradox is embodied in the idea that BASIC isn't good enough for any 'serious' programming and yet nothing else is as good as BASIC in providing an easy to use interpreter that introduces programming concepts and structures in a way that satisfies the neophyte?
Sure, everybody will trot out supposed successors like Python or JavaScript, but the fact that we still ask ourselves the same question, 'is anything as good as BASIC', every few months betrays the fact that many people must not accept that these successors accomplish the same results for whatever reason.
No other language I know of has the same instant gratification as BASIC. The strength of BASIC for me was if I wanted to draw a box, all I had to do was set the screen resolution and the coords of the box. That was it, two lines. I didn't have to load a bunch of libraries or write a bunch of arrays or design some placeholder interface to put the box into. I don't think any language will be able to take BASIC's mantle until it regains that level of simplicity and the ease of running and testing what would be to most other languages wholly incomplete or broken programs. There's a lot more opportunity in BASIC to just ask oneself 'what would happen if I did this?' without worrying about creating some huge framework just to test one concept.
From the age of 12 to about 15 I was really into QBASIC, but all the bad habits I learned from not having to structure things made it basically (heh) impossible for me to move into a 'real' language. I don't know that the paradox can be reconciled that BASIC's strengths are its weaknesses and vice versa. With 'successors' like Python there is an intent for the language to be 'valid' as a 'real' programming language, so it has to be structured in a less forgiving way than BASIC which makes it less approachable, but it makes it easier for those who do work with it to transition to other languages.
Maybe its better to accept the barriers to entry than to try to come up with another language that is a fun dead end. In some ways BASIC is a trap that should be avoided.
I support the Slashcott and will not be reading or commenting from 2/10/14 to 2/17/14. Beta is steaming pile of dog shit
These days it is free to try 3D Studio, Maya, or Softimage and they all have scripting built in. These packages make it easy to see the results of logic and equations in real time. I started messing about with BASIC on a C64 when I was seven, but never really got into programming until I started working with these type of 3D modeling/animating/rendering packages in university and my early career. This path eventually led to "real" languages (C++ these days) and full application development. As a bonus, these 3D packages will offer people an artistic outlet which might be of more interest to them. Cheers, 3CM
What about Processing?
From http://processing.org/about/ - "Processing is a programming language, development environment, and online community that since 2001 has promoted software literacy within the visual arts. Initially created to serve as a software sketchbook and to teach fundamentals of computer programming within a visual context, Processing quickly developed into a tool for creating finished professional work as well. "
These are all languages which can be easily approached. They all can be run from the command line and have a fairly simple syntax for beginners. They allow to start with a simple one liner 'hello world', and can go all the way to OO concepts, database connections, web dev, interaction with other languages/concepts, etc...
Also, they provide the instant gratification needed for the beginner as it's easy to find simple projects that would satisfy the needs of a newcomer (creating a simple web form, a script to list all their mp3s, an equation solver, a graph plotter, etc... )
Personally, I started with BASIC (before I had a computer, writing programs on paper...) and if I had to do it all again, I'd probably go with PHP
How do you get the instant gratification we oldies got when sitting down in front of the early-80s home computers?
Well I have a working Apple ][ around so that's not a problem to fix.
I've been teaching some kids how to program simple games using Python and the Pygame module (wrapper for SDL) with some success.
One problem I've noticed is that the kids aren't all that interested in programming the simple exercises, such as the "guess the number" game or programs that generate simple ascii art -- all stuff that was exciting to program in BASIC back in the day. I had a promising 12 year old student who was making good progress and had successfully made (with help) a side-view tank shoot-em-up game with two players. Guess what he wanted to do for his second project?... a StarCraft clone.
He was able to produce a random ground texture and to control a single "dot" to move where he wanted it via mouse clicks, and then he bogged down. He gave it a good try but the project was a bit too complex to provide easy progress.
I need to come up with some simpler project ideas that are still fun to create.
Religion is poison to rationality, and we lose sight of that at our own peril. -- Lurker2288
scratch.mit.edu
I've got two kids (8 and 11), and I got them started on Scratch recently. They love it, and I've been amazed at what they've accomplished. My 11 year old has come up with some pretty complex programs on his own, and has already figured out that you can learn a lot by looking at other people's code (which is easy and strongly encouraged on the Scratch site). When they get older, I'll move them on to something like Python, Java, or C#; but for now Scratch is a perfect fit.
Some of the highlights:
* Graphical (instead of text-based). This was a big plus. My kids are still learning programming concepts (tests, variables, loops, etc.) but not having to struggle with syntax and compilers. Instant gratification is important with younger kids.
* Sharing. The scratch website and community is based on sharing (remixing). My kids have learned a lot by looking at other people's programs.
* Fun. Scratch is sprite-based, which makes it easy to make games and movies...which is what kids want to do.
* Compatibility. Works on Windows, Mac, and Linux. 'Nuff said.
I could go on and on, but do yourself a favor and go check it out.
Backstory: I learned to program at age six on a Commore Vic-20. I decided to learn because games on the Vic sucked and programming was the only thing interesting one could do on it (even for a small child). Commodore BASIC was limited and quirky, but provided me with hundreds of hours of fine entertainment. One could pick it up quickly thanks to the programming manual that was bundled with every computer (take note).
When somebody asks me who had the most influence on me on my career choices and inspired me, I don't tell them it was Bill Gates or Steve Jobs, but Jack Tramiel. "Jack WHO?" "Never mind..."
If I had a kid and she told me she was interested in learning to program, I would pick Python. It is easy to learn and very deep, which good support for imperative and functional programming, other than OO. First thing, I would buy her a book. There are plenty around that start from the basics and work their way up to a simple but rewarding game using PyGame or Pyglet.
Back on the Vic I could only choose between BASIC (mediocre and slow) and Assembly (obscure and arcane). Today beginners can choose from so many options. The important thing is not knowing "where" to start, but "how". Buy a good book, and if you love what you learn, you'll never stop as long as you live.
Hack your mind out of its sandbox.
For anyone suggesting VB, or Visual C#, or any of the other "Click to build the framework then fill in the back end", this is the worst possible thing an actual beginning programmer should be looking into.
I would assume from the OP that we're talking about people with no programming background. Taking someone like that, giving them a button to click to generate a UI, then having them fill in the blanks is #fail. They don't already know how to program. It would be like asking someone to complete a puzzle, in a dark room, where they don't know what shape the blanks are in the puzzle, or what colors they should be, or even where the front or the back is.
Interface builders are nice for people that already know how to program, because while creating UI's is tedious, it's also about the 10th thing to be done when building a program. People who have been programming for years can work backwards (Yes, UI to logic is backwards in all cases except for programmers-who-specifically-design-UIs, but that's not what we're talking about here) from the UI to the underlying program logic and the flows between UI elements, but someone new shouldn't be developing in this direction. They should be understanding how the logic behind the program works, in many different variations, before they go putting a pretty button in front of that logic to show the result in pretty graphical ways via some rendering library call..
BASIC, Lisp, Perl, Python, Java (not javaw or AWT), all are useful for the basic understanding of what a program is, what control and input and output logic is. As people have mentioned, Python and Java both have graphical toolkit extensions that can eventually extend your development to pretty pictures and not input/logic/output. If you really want some sort of "visual" developer to put in front of this person, go look into some of the "Blocks" development tools, like Google AppInventor, for example. These use interfaces analogous to puzzle pieces to represent the code in the application, and you can drag and drop inputs and outputs to hook into control statements to do things - sorta like the virtual programming equivalent of everyone's favorite Radio Shack 160-in-1 Electronics kit.
For the love of god, though - don't "teach" someone to program by putting them in front of a framework generator and having them "go at it".
This space for rent. Call 1-800-STEAK4U
I've been teaching 10 9-year-olds Kodu Game Lab this week in my home and they love it and are understanding the concepts of event oriented programming while creating computer games. We tried Small Basic but they are all just learning typing and that was a bit of a barrier. Kodu is extremely easy to learn and very fun for kids.
http://charette.com/blog/fairfax-computer-camp-day-1-kodu-game-lab/
http://charette.com/blog/fairfax-computer-camp-day-2-small-basic-and-turtle-programming/
http://charette.com/blog/fairfax-computer-camp-day-3-small-basic-and-kodu/
http://charette.com/blog/fairfax-computer-camp-day-4-building-and-testing-kodu-games/
Disclaimer - I work for Microsoft, the creator of Kodu Game Lab and Small Basic.
Michael S. Scherotter
Work as if you might live forever, Live as if you might die tomorrow.
My daughter (8 years old) will be learning Etoys this summer, and when she's grown tired of that, Python.
The Navy did an exhaustive study of programming languages a little while back, and recommended Python as the best teaching language for high-school level computer programming.
I hope she doesn't stop there, but seeing as I haven't written any VIC-20 assembly, Apple ][ BASIC, or Turbo Pascal in nearly two decades, I don't think the languages are really what's important.
My God, it's Full of Source!
OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
Python, Perl, Lisp, Scheme, BASIC, Java, JavaScript, shell... it doesn't matter. Pick up whatever feels most comfortable, or whatever tool is most readily available. Learn the basics of flow control, data structures, and the most fundamental algorithms. Learn how to debug, document, log, build, install and maintain.
Once you've mastered these basics, move immediately to C (not C++). Programming in C will teach you what it is that you're actually doing in that high level language, and force you to manage everything that you want to do. You don't just instantiate a new class to get a thread or forget about that variable's storage when you're done with it. You have to think about the details and understand them, and even if your entire career is spent writing Python, you still need to understand these things. I'd recommend assembly, but there's a lot more well documented sample code in C to work from, and getting larger projects done in C is still practical, if somewhat painful.
Once C is something you're comfortable with, trying out C++ is an excellent next step, but that's probably best determined by what you want to / have to work on.
Ok it's not a programming language exactly... But you can script a lot in it, and it has the added bonus of making pretty pictures, perfect for beginners I'd say.
Adam Gibbons
All the fun and cool stuff that is easy enough for a beginner is off-the-shelf these days. Why bother learning to program? The interesting stuff that is not off the shelf is no longer easy enough for a beginner who knows "X" to write programX.
python would be the best imho, you don't even need to write the code on a file, just start the python shell and play with it, for the gui use pyqt4 signal and slot are easy to understand, ruby might also be good, I think it has a shell too .NET it's easy to create gui interfaces, AFAIR event handling is quite easy too you just need to click on the object and select the event from a list and it will automatically create the function, one of the best thing about C# if you use visual studio(all versions) is intellisense, you don't have to waste time looking at the api to find a function
Another good "all in one" option might be C#
It isn't as much the languages today but our level of instant gratification.
Back in the old days.
10 PRINT "HELLO"
20 GOTO 10
was considered kinda cool for your first program.
Or if you wanted to make a game...
10 PRINT "Your are in a room labeled Center where to go (N,S)"
20 INPUT $D
30 IF $D = "N" THEN GOSUB 1000
40 IF $D = "S" THEN GOTO 2000
50 PRINT "I do not understand your request"
60 GOTO 10
1000 PRINT "A Monster eats you... Your dead do you want to play again? (Y,N)"
1020 INPUT $D
1030 IF $D = "Y" THEN GOTO 10
1040 IF $D = "N" THEN GOTO 3000
1050 PRINT "I do not understand your request"
1060 GOTO 1000
2000 PRINT "You Escape and you win!! Want to play again? (Y,N)"
2020 INPUT $D
2030 IF $D = "Y" THEN GOTO 10
2040 IF $D = "N" THEN GOTO 3000
2050 PRINT "I do not understand your request"
2060 GOTO 2000
3000 PRINT "BYE"
Today Instant gratification requires cool GUI drop pictures multiple form input and you better be able to use your mouse or no deal.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
Ruby.
Kind of surprised it's not getting more love here.
(hey, not everyone's into the Python philosophy)
sic transit gloria mundi
I think almost any language will suffice as a starter language. The reason we all learned on BASIC wasn't because it was 'easy.' It was because all those old computers booted into a BASIC interpreter. You could (and had to) write code directly from the command line, and to make your computer do just about anything, you had to code it. That last is the kicker -- it provided a motivation to code. Javascript has several advantages: 1) You don't need to write a whole program; you can embed one or two lines of script in a web page and it'll do something. 2) Adding dynamic elements to a website is something that kids might actually be interested in doing -- it's a motivation to do the coding. 3) Its syntax is both fairly forgiving and similar enough to standard languages to get kids used to some of the conventions. 4) Firebug provides pretty decent debugging and interactive coding capability. and 5) Unlike purely pedagogical languages, knowledge of JavaScript is useful knowledge.
There is still a great platform for teaching kids BASIC and ASSEMBLY.
TI calculators. This is what I first started hacking on and generates a instant feedback loop for kids who use these calculators in class.
What better way to reinforce a concept than to program something to help them derive answers from their texts.
and of course an xkcd reference (http://xkcd.com/768/)
What I find amusing is how completely Pascal has disappeared from both historical memory and current usage. Some of you may remember the 80s for Basic on a C64, but I remember a huge bandwagon for Pascal both as a teaching language and as a working language. (I am not advocating Pascal, just reminiscing.)
Still alive and well. Gui implementation is very simple, and it has a lot of features for expanding. Besides, most high school students have a graphing calculator and many are bored in class. That's how I learned basic programming.
As in what, 1987 and onward?
If you want instant "wow" gratification, the closest I've come to that lately is with LSL, the second life scripting engine. Which affects the objects you make in the Second Life Virtual world. The interface is easy to use and the syntax is really approachable.
Second to that I'd say Python, mainly for its easy to pick up syntax, ubiquitous nature and the capability to do actual 'real-world' stuff with it as you develop skills.
"Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
There are a number of universities using Haskell for their intro to computer science courses. Haskell is a lovely language but maybe second only to C++ in complexity. You need not use all that complexity however.
The Christian religion has been and still is the principal enemy of moral progress in the world. -- Bertrand Russell
Think about the project rather than the language. For example, a simple off-the-shelf robot kit with an embedded high-level programming environment may capture a newbie's imagination. Raise/lower the arm once. Then five times. Then with a five-second pause in between. Then when it's sound sensor kicks off...etc.
A suitable kit would have a fairly abstract library (and likely a language like C or Basic).
If you liked BASIC for learning why not install an interpreter and use that? It isn't state of the art by any means, but it would be a very simple introduction to the concepts. Once someone has some feel for that then you could move on to something modern if you felt they couldn't handle that right away.
Alternatively, my university uses Java for our intro to programming classes for people with no programming experience at all. The environment we use for it is DrJava which is free and designed around being a learning tool. Better still, there are tons of CS 101 course syllabi out there that would give you a very good lesson plan to start with in that environment if you wanted to teach with that.
Personally, I'd say the tool to use depends on the student and the purpose. If it is someone just looking to understand a little bit about programming but won't be doing more, then let them play with BASIC since that is really easy to get into. If it's a child you are introducing to the concept or someone who wants to eventually get to advanced things, go with the DrJava route.
Since I can't tell them apart, I treat all ACs as the same person.
I'll even link them since the poster can't do basic research before Apple-bashing
I do not own an iOS device with which to do research. In what way should I do the appropriate research next time?
As far as non SL virtual world languages - Alice would be another good contender.
"Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
All interpreters are banned [...] they run javascript sites just fine
How do iPod touch, iPhone, and iPad devices run JavaScript sites without a JavaScript interpreter? The answer to this question helps explain why I recommended JavaScript over BASIC in another comment.
Lua. It's C-like, and you can write WoW mods in it.
How about starting with assembler?
http://altdevblogaday.org/2011/03/24/machine-code-is-for-kids/
Mada mada dane.
Someone forgets trying to do things in BASIC, only to find it's too slow, and being forced to learn assembly/machine language.
Someone forgets the hours of pouring over hardware manuals trying to figure out the right registers and addresses to do anything so simple as getting keyboard input.
Someone forgets that in the '80s, computing was about anything but instant gratification.
I do not fail; I succeed at finding out what does not work.
Well, I believe that Wilsonware's Winbatch with compiler is great. It is both basic-like and provides the capabilities of incorporating other languages within its structure. GUI display capabilities are all built in and totally customizable. The compiled code is free to distribute. There is also a non-compiled version, but the code is only distributable within a network.
I have been using it for about 8 years and i have been able to code and others have been able to code quite complex systems.
They also offer a product for creating web automation called Webbatch but i have no experience with it. Many seem to love it.
My first exposure to programming was typing in the line PRINT "HELLO" on a Burroughs B6700 terminal and seeing it reply back HELLO. How it could do that intrigued me so much that I HAD to figure out how it worked. Perhaps that triggered some latent OCD I was unaware of at the time, but that was over 35 years ago and I haven't been the same since. The need to understand, all the way down to the level of how the electricity coming out of the wall socket was transformed into what seemed to me at the time, an intelligent machine, has driven me throughout the years. Though I understand much more now, and the "ghost in the machine" gave way to simple logic and algorithms, the curiosity that my first encounter inspired has never left me and I still have the need to understand how every new technology that's been layered on top continues to drive me on.
I've since tried to instill this same inspiration in other people, including my children and anyone else who will listen, but I've not met with much success. Most people I encounter who've come to programming over the last 25 or so year don't seem as "curious" about the inner workings of the machines. Perhaps it's because they grew up with already sophisticated computers and the "magic" is just taken for granted. Perhaps it just takes a particular form of OCD to appreciate it. I don't know. What I do know is that it's hard to get someone inspired using a language like standard BASIC because they won't get excited about something as simple as PRINT "HELLO". They expect, within a few minutes to be able to create some fantastic, world changing first person shooter, and when they find out how much work is involved they soon lose interest. Try to explain a modern language like Java, C# or even VB to them and they begin fidgeting and looking for the door.
The bottom line is, I don't think the language is that important - just about any language will do. Instilling the interest and desire to learn is the hard part and frankly, I've haven't figured out how to do that yet.
Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
Can't claim it's the best way, but I've done several summer youth courses that didn't allow internet access or outside software; I used VBSCRIPT. Starting with "Hello, World", we went to the typical guessing game. Then those that were still interested moved onto games with repeating turns or rounds.
msgbox “Hello, World”
- - - - -
Name=inputbox(“What is your name?”)
msgbox=”Hello, “ & Name
if len(Name)>5 then yn = inputbox(“Do you have a nickname? (y/n) >”)
if yn = “y” then NickName = inputbox(“What is your nickname?”)
msgbox=”Thanks, ” & NickName
- - - - -
sub shownumber
randomize
dim max,min
max=10
min=1
rand=(int((max-min+1)*rnd+min))
msgbox rand,0
end sub
do until reply = 7
reply = msgbox(“show a random number?”,4)
if reply=6 then
shownumber()
else
exit do
end if
loop
- - - - -
I've also used Visual Pinball to introduce some of the concepts; adding scoring, extra flippers, and lighting patterns involves some logical thought.
Bash isn't an especially pretty language, but it allows huge flexibility, by chaining together all the CLI commands.
This makes it really easy to program quite advanced behaviour. Things like:
echo hello | festival --tts
or
zenity --info --text "`fortune`"
or
cat document.pdf | ssh hostname lpr
Nothing better than assembler to teach what is really going on with a computer.
The old 8 bit micros were easy to come up to speed on (Z80, 6502).
My first class was assembler on Z80. First assignment was write an editor we were required to use for all our text editing for the rest of the class (you could tell who used theirs, as our editors kept acquiring features as the semester progressed), second assignment, write a dissassembler (also handy), last assignment write a compiler. Very useful class. After that semester, self taught 6502, then 8086 over the summer.
ARM is supposed to have a pretty clean instruction set, so maybe even use ARM instead of an old 8 bit micro. x86 is ugly-- as a beginner, would stay away from it.
Assembler leads to understanding at a deeper level, this deep understanding transfers to better use of compiled / interpreted languages too. E.g., on modern CPUs with deep pipelines, branches are very expensive. Most folks who cut there teeth on basic and python type languages are ignorant of this. Once you _see_ this happen, you are motivated to find out, "Is putting the more common code path as the default in a conditional better optimized by this compiler/interpreter?" The result is a lot less of the crappy code that is so common today (regardless of language).
Now get off my lawn.
While I did start with BASIC at age 7, my first foray into computer programming was with Livecode. LiveCode (Formerly Revolution) is a spinoff of Apple's HyperCard that fares incredibly well in commercial and educational markets. www.runrev.com has the details. I used to teach 5th graders programming with it, and it's so simple yet so powerful that we'd build networked starship simulation software for a local space education center (www.spacecamputah.org). It's an incredible platform to build on, and it has all the types of control structures and interactivity you'd hope for (Except objects, kind-of: I would teach OOP on a limited basis, since your GUI elements behave like objects; but there are no real logic-only objects in LiveCode).
If it's to teach to young children, I think that good choices could be
- scratch (scratch.mit.edu) a graphical langage that may help to understand basic algorithmic on a visual interface
- futurepinball (futurepinball.com) a pinball emulator which uses event-driven basic to manage the controls
Both have a ludic aspect that may appeal to children
If they are a little older, HTML then HTML+PHP could be a good choice. Javascript is a pain in the a** when it comes to complex programming (and I don't even talk about the cross browser nightmares). As a bonus, PHP may be used as command-line.
I'd avoid Python (a missing space may trigger a logic error with no syntax error which could become a pain for debugging), Java, C++ and C# (and other object oriented) as OOP is far from intuitive and C or Pascal (and similar) for the memory allocation problems. PERL seems a little un-intuitive (even if it's a great langage) and Reverse polish (Scheme/Lisp/...) is also a big problem.
If they are a little hardware oriented, Arduino or plain AVR/PIC microcontroller could be great (and there are good cheap devkits including lots of leds, buttons, an LCD screen, ...)
Speaking as one of those persons that got started back in the 70's, the best casual starter that I am aware of today is python -- best to work with print statement oriented programming as you get extremely fast feedback on your code. Best also to have a mentor around.
I've fallen off your lawn, and I can't get up.
If you are looking for a language that is supported out of the box on ever major operating system released in the past 10 years, the answer is Javascript. Editor -- the built in text editor; Execution -- browser; Debugging -- well, if it's a modern OS with a modern browser (IE8+, FF+FireBug, Chrome+FireBug) you can debug.
There are plenty of examples online. It has a visual result that gives instant gratification. It has a syntax that leads towards "real" languages (don't flame, you know what I mean). And, given the future direction of HTML5 + Javascript, it sets you up for future success if you decide to continue.
What's so wrong with learning C as a first programming language?. I taught myself C when I was 12 and looking back now it was the perfect choice.
It's a strictly procedural language without any bells and whistles and the C like syntax is used by a variety of other languages.
Ok, you won't get impressive results for some time, but with graphics libraries like Allegro or SDL you can produce some nice graphic effects or program simple games while still being platform independent.
Furthermore I think is important for a novice programmer to get used to resource allocation and deallocation . As even in a garbage collected environment allocation related problems can still occur when the programmer doesn't think about resource management.
They'll never get excited by very simple things like I have been.
Ah, yes, I remember buying* a "professional" game and thinking "Heck, who published this? If they'll sell this crap they'll probably sell something I can knock up in a weekend. I was right, and while I never joined the "whaddya mean you won't insure my Ferrari until I turn 18" club I did buy a Honda 70 (look - I had parents!) and my computer habit was pretty much self-funding from then on.
However, it would be interesting to put your assertion to the test, and see how satisfied kids would be with simple programming if *they* were in control. After all, some kids still paint pictures, take photos, make videos, form bands and don't seem worried that the output isn't as good as they see on TV. However, even back in the day. making a blob fly around the screen or coaxing a tune out of a Trash-80 clone didn't float everybody's boat.
(*Memory a bit hazy on the "buying" bit actually :-) )
In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
http://smallbasic.com/
Besides everything I imagine everyone else is throwing out. It's very easy (and free) to pick up unity3d and start doing things. It uses their own version of javascript (or c# or boo). I found it incredibly easy to do simple things with javascript and unity3d. And it's that much more interesting and impressive because it's 3d.
I would say you should have someone who knows programming sitting close at hand just because it looks so big and complex and the tutorials aren't as good as they could be.
If you really want to teach them though, don't ruin their lives! (kidding... sorta) If you know C, teach them C. I can only dream how my life might have went if I'd just had the good fortune to know someone who knew C and was willing to teach me.
Seriously... If you dispense with use strict/use warnings it handles pretty much like basic with a hint of structure. I was asking exactly the same question the other week with regard to what to start my daughter (aged 7) off on. I went through some mental deliberations and settled on perl. She's taken to it as well as I did Sinclair BASIC at a much older age, She can't write anything from scratch (that would be expecting a LOT of such an age group) but she is happy to type in a short dictated program. She chooses the subject (times tables, Fibbonnaci etc) and I work out a strategy for building the program up a few lines at a time, with it being runnable as often as possible. She's demonstrated that she can modify it for basic parameters, eg which "times table", "max size of Fibbonnaci number). The best one we've done to date is one that picks 2 random numbers and asks a question like "What is X times Y?" It prompts for an answer and checks it with a friendly "yea" or "bad luck" message. It's not pretty, it's not trendy, it's not GUI but in my humble opinion, she is learning what computers can *really* do.
Why can't women be like Hedy Lamarr - beautiful, talented and inventors of frequency-hopping spread-spectrum techn
I would likely start a beginner not in VB but maybe Perl or Python or VBScript and C. Why not C++? You can program C in C++.
I think the older BASIC should be taught if the student wants to go into microcontroller technology, which some of it still requires a knowledge of assembler to program.
I would teach them how to use the goto in a way that does not create spaghetti code (like when exiting a loop or simulating a control structure that doesn't exist in the programming language).
Seriously, today is better than ever for getting non-programmers interested in programming. Alice provides an awesome IDE with the runtime built in. Carnegie Mellon has developed great lesson plans for several educational levels (and most of them are free). The whole thing is free! Students get to actually run the animations they programmed and see immediate results. The IDE prompts them to make choices they wouldn't have thought they needed to ("Oh you mean I have to pick a direction and speed when I issue a 'walk' animation command?").
I showed my daughter BBC BASIC in BeebEm, and she predictably, enjoyed the classic
10 PRINT "DAD SMELLS"
20 GOTO 10
Microsoft Small Basic
It's the best learning tool I've found so far -- it's simple and has an excellent help system. The auto complete has descriptions along side the text (encouraging exploration and discovery), the sidebar help automatically displays help for the current command, and the PDF tutorial is well-designed and simple enough for a bright child to understand.
Some of the changes are a bit odd, but they make sense. Next has been replaced by EndFor, for example, but this does keep things consistent with EndIf, EndWhile, etc.
The program itself is small (6mb download) and incredibly simple -- no weird options or anything to get in the way. It actually makes tools like Scratch look complicated!
Microsoft actually did this one right. I give it my full endorsement.
Required reading for internet skeptics
I'd recommend a compiled language with exception handling. I feel that makes it a little harder to get stuck/frustrated without any clues. The compiler keeps syntax in check. Exception handling gives a better clue as to why something is failing at run time. Of the major languages, I'd take either Java or c#. Eclipse or VS express, both solid and free IDEs. There are also tons of structured "learn this language" tutorials. Most also start with console apps which are a good place to start. I'd lean towards VS because I prefer visual studio. But from the academic value point of view, I don't see any notable difference between c# and java for the beginner. Obviously you'd go for Java if you're on a mac though.
Contrast that against something like javascript. It can be damn near frustrating trying to understand the DOM, the CSS inheritance, etc. That and simple syntax errors can prevent methods from loading, etc. Sometimes too much simplicity leaves a beginner without any sort of help. That doesn't even touch on browser compatibility.
I'd start with one of two options: Web programming or physical devices. Either one lets you make pretty simple programs that actually DO SOMETHING.
For web, I'd obviously start with HTML/Javascript, then go into PHP. Or maybe skip Javascript at first, as it's a huge pain to debug. Point is, you can build something with a nice pretty GUI pretty quickly and easily, and PHP and Javascript will prepare you well (in terms of basic concepts and syntax) for more advanced languages like C or Java.
The other way to go -- the way I really went -- is to start with programming physical devices. I started with Lego Mindstorms -- you start with their programming language (drag-and-drop stuff), but that quickly becomes too basic, so you start looking into things like NQC -- basically a C variant that has a rather limited instruction set, specifically designed for the Lego microcomputer. It's a bit hard to learn on your own (I still remember asking for help with my first program -- "You need semicolons!" "...I do? Where?"), but if you actually read the tutorials or have someone to help you with it, it isn't too bad, and you can immediately see what it's doing. Something like an Arduino could also work, though it may be too complicated. I'm only familiar with the TI MSP430 Launchpad stuff, which is similar in design, but would be way too difficult for a beginner....but I gather that the Arduino has some easier programming tools.
I thought about this, and decided to set up a TRS-80 Color Computer emulator in the hopes that the kids would take to it and want to learn how to program it. It's as simple as it gets - real-time basic built right into the OS. The only bummer is that i can't find the original books that came with it - there was one for BASIC, one for EXTENDED BASIC and one for DISK BASIC... Alas the kids just aren't interested. They just don't seem to have the attention span or patience.
As a novice programmer, one thing that kept throwing me off was C++, which I chose as my "beginner" language. I'm all for learning the basic foundations of programming, but Jebus, you can learn that through higher level languages as well. I realized that when I took a break from C++ and tried PHP and Python. The difference was astounding. I finally began to comprehend the principles without having to be incumbered by the complexities of the language getting in the way.
I can only dream how my life might have went if I'd just had the good fortune to know someone who knew C and was willing to teach me.
Most likely you'd have wound up a junkie on skid row. Just sayin'
FIRST has been pushing at this angle for a while. The Lego mindstorm kits require programming (you can use visual languages and c-like languages), and can be done in initially small pieces, and provide instant gratification that's appealing to people, and provides instant, real-feeling impact. Great for youth and people just starting to learn about programming and thinking through solutions to not-purely-abstract problems. Has that quick feedback cycle I used to get with ye olde Vic-20, but is a more engaging manner.
BASIC is still a good starter language that can be presented to interested people in their early teens. Then C is the logical next step. Once you know C you can pick up pretty much anything else.
My immeadiate reaction to this article was Python. However there is a fun language out there that gives a lot of bang for your typing called "Processing" it's targeted at artists and rank amateurs. It won't get you a cool prgramming job, (maybe I'm wrong), but it will get you programming with a small language and easy to learn libraries. Lots of examples are included in the compiler download. http://processing.org/ [processing.org]
A teenager I'm acquainted with has been geeking-out with http://www.qb64.net/ for several years. It seems to fill the niche that C-64 BASIC did for me and MS-BASIC and QBasic did for slightly younger geeks.
What about basic-256 I have my 11 year old on it she likes it a lot and seem like a very good place to start before me and the wife bumb her to C and perl
My kids don't mind programming. They both used Alice http://alice.org/ and were meh about it and didn't go back (about two years ago).
They both like Scratch http://scratch.mit.edu and the 12 year old has moved on to building his own blocks in the Squeak interface underneath it -- so as a starter language I think it has done exactly what we'd like it to do. He's now looking forward to learning python, probably using the media computation materials from Guzdial/Ericson.
The 9 year old actually prefers Microsoft's Kodu http://research.microsoft.com/en-us/projects/kodu/.
I'm thinking about working them through some of the material at Bootstrap http://www.bootstrapworld.org/ which is teachScheme for kids.
You should read this, "Does Visual Studio Rot the Mind? Ruminations on the Psychology and Aesthetics of Coding" By Charles Petzold http://charlespetzold.com/etc/DoesVisualStudioRotTheMind.html
We put you on the Internet map,
www.racknine.com
M68HC11 assembly.
It's simple enough that anyone should be able to quickly pick it up and develop small programs.
How about Alice or Kodu?
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
They're commercial, but Blitz Research's Blitz3D and BlitzMax are great if you want instant graphical output (as in games), covering Windows, OS X and Linux in the same purchase.
Their new Monkey language is a public domain compiler/translator that outputs to HTML5, Flash, Android, IOS, OpenGL and XNA. The Mojo graphics library for Monkey is commercial, though the demo is the full HTML5 version with a non-commercial license, so it's great for instant 2D-in-a-browser satisfaction, and the language is a great Basic/C++/Java crossover.
(Disclaimer: I was formerly paid by Blitz Research as support for Blitz, now mainly a tester and enthusiast.)
Lua is simple, straightforward, high-level enough, and has the instant gratification factor of being useable in games and graphics.
What, no love for Eiffel? I thought it was supposed to be the greatest first-language ever! Can't blame anyone though... I started learning it a few weeks ago, and it's an irritating mess.
"scripting languages are good, but limited in what you can do"
They are? Most widespread "scripting languages" have a ridiculous amount of native libraries available for them that allow you to do just about anything. As an example, I can go online, with nothing on the computer, and in about 10 minutes and 5 lines of code in Python, complete most tasks, at least as proof-of-concept, whether its GUI creation, network protocols, binary file manipulation, OS handling, database manipulation, etc.
Also, the whole "scripting language" thing is a false dichotomy. I think what you really mean is "interpreted language". Maybe back in the mid-90s when computer speeds were low enough that it was readily apparent what the difference was between compiled and interpreted languages, "scripting language" might have meant something, but not today.
As far as things being too complex these days, I'd tend to agree---it's absurd the amount of crap overhead has to be accomplished in the name of "proper programming". Nix the GUI and all the frameworks. Just forget it. Grab python, a text editor, and a console and start with
print 'hello world!'
Doesn't get much simpler than that.
Comment removed based on user account deletion
Maybe someday we'll have the perfect language that satisfies everybody. Right now, every language has quirks. Beginners are going to have to learn that. You are not going to find a language that doesn't have something like this. If it isn't whitespace, it's a missing semicolon. Ruby? How will a beginner grok the idea that 2 has methods? They think numbers are just numbers. You mean all this time 2 has an entire world full of stuff in it? What's in 6? I'll tell you what's in 6. Quirks. And the quirks are based on quirks. After that, it's turtles.
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
The "back-story" was always there, unless you go back to the 1940s or something. The BASIC programmer of 1981 didn't think about things like how does PRINT really work, the garbage collection that kept string variable storage from growing to infinity, etc. The abstraction and (temporary?) ignorance of the back-story is what lets you "just code something quick."
I think the reason things "feel" different now, is just that the back-story is longer and the abstractions are higher. When the 1981 BASIC programmer decided to dig deeper, it wasn't very long before he was working in assembly language, whereas when the 2011 Python programmer digs deeper, he's reading the source code to the library (most of which is itself written in Python) or maybe down in C and learning the OS' API calls. It's a deeper dig before you're thinking about transistors, but I'm not sure that's really important. You've got to start somewhere and really no matter where that is, you're going to start learning new things if you're interested.
As copyright owner of this comment, I authorize everyone to defeat any technological measure which limits access to it.
I think it depends on what you want to do with it in the future.
I'd pick the platform first; web, desktop, mobile, etc... and then pick a fun, simple starter project to build. I always learn best by building something. Seeing something I dream up take shape right before my eyes. Seeing the fruit of what you actually want to create come to life, on the platform you actually want to build for, will motivate you to learn much more than just dinking around in BASIC.
I like to teach students with Python and Pygame. By the end of the first semester programming class they can create some fairly complex games. I have videos of these games on-line, along with a free draft version of the textbook we use:
http://cs.simpson.edu/?q=python_pygame_examples
DarkBasic Pro doesn't have line numbers. DOES have functions. Add-on libraries. It's compiled, free, and high on the instant gratification scale. With a bit of work, (less than just about any other language I can think of off hand,) it can be used to create games that contemporary kids would actually recognize as the sort of games they play.
There's a lot of different questions and concepts going on here.
Has the level of abstraction in computer systems reached a point where beginners can't just code something quick without a huge amount of back-story?
No. But that's not learning to be a programmer. Yes, you can point a beginner at any number of languages with a bit of a reference book or online dictionary and they can hack out something that works. But that is only the most rudimentary lesson in programming.
I find this to be the case now; scripting languages are good, but limited in what you can do...
Which sounds perfect for a beginner language. You start with basic concepts like flow control, variables, data structures, and other rudimentary things. If they "get it" and are excited by the potential for doing more, then they are on their way to being programmers. If not, they have been exposed some basic computer science concepts which will do them good in today's world.
Think of English or History or Art or Mathematics. Most people take classes in those subjects, but few are enthralled to the point of making a career out of any of them. An introductory programming course using Python may help someone hack together some tool later in life, but it does not make them a professional programmer.
and GUI creation requires students to be familiar with a lot of concepts (event handling, etc.) that aren't intuitive for beginners.
And is there something wrong with that? GUIs are advanced topics. They require understanding of advanced topics.
What would you show a beginner first â" JavaScript? Python? How do you get the instant gratification we oldies got when sitting down in front of the early-80s home computers?"
There are many languages available today that would work fine as introductory languages. And many students will check off the requirement box and move on. A few will "get the instant gratification" regardless of the language used and move on to more advanced learning.
You seem to have the implied assumption that if you can make the results of coding "exciting" - flashy graphics, sounds, 3D animations, explosions - then students will be more interested in coding. I doubt that is true. At the end of the day you still sit in front of a computer and push buttons over and over.
- Jasen.
Back in the day I learned a lot from programming Hypertalk (Hypercard) on my parent's Mac LC. Despite the somewhat heavy syntax sugar, it really let you do a lot with very little, and all of that sugar meant that you could figure out what is going on by simply looking at the code. I'm still annoyed at Apple when they started shipping the player instead of the full development environment, and when they eventually dropped it entirely. The code is still around, but it's wildly overpriced for kids and example code is much harder to find.
Still, the ability to put a button on the screen, and then pull up the code in the button to find:
on mouseUp
ask "Please enter a number"
put it into theNumber
answer "You entered " theNumber
end mouseUp
That's the sort of thing you can build off of very easily.
I read the internet for the articles.
Turbo Pascal on the IBM PC worked extremely well and was cheap enough for everyone to afford. It was a killer-app all on its own. I don't even remember a C compiler being offered in the early days of the PC. And I don't know why there wasnt one. But all the Microsoft development kit was expensive except for the assembler.
Scheme is an excellent starter language, and teaches concepts you can carry to other languages too...
It can basically be the new Logo with something like DrRacket.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I think small basic was released to solve this problem. I think it is similar to the early versions of visual basic but designed to be easier to understand and get simple programs running.
Free Pascal: http://www.freepascal.org/ will get you a free version of PASCAL. Runs on nearly OS and cpu architecture out there. Why PASCAL? Because its easy, not a ton of Libraries to memorize for things like file handling, and the like. Teaches structured programming without the overhang of all those libraries. You get compiled code which means the end program is fast!
PERL is of course super-easy to just start coding in, there's tons of documentation/tutorials, great for text handling, runs nearly everywhere, and again, no massive library memorization just to open and read files.
I wouldn't do industrial strength jobs with either, but for learning, simple jobs, utilities etc. both are pretty good. PERL is often the glue-code for things like rotating web logs, or other stuff (yes you can do it in shell scripts, but PERL gives you lots of easy to use modules off CPAN.) Screen scraping is fairly easy with PERL's lib-www.
Python is pretty nice and simple and if you need GUI is not hard to learn PyQt once you know Python.
"It is our choices, Harry, that show what we truly are, far more than our abilities." -- Prof. Dumbledore
If you want instant gratification and know how to code then you can call into C libraries with one-liners.
If you don't know any programming at all then there's a whole series for you too.
And if you write PHP then imagine what it'd be like without the bad hangovers from v3-4, with all the planned improvements from the 6.0 they abandoned, and with functions that use a consistent needle-haystack order everywhere.
Perl makes the easy things easy and the hard things possible. I hated programming until I was exposed to Perl. Now I have been doing it professionally for 13 years.
- Interpreted, so you can quickly test things.
- Structured enough, but isn't all up in your face about it. Based on natural whitespacing instead of annoying brackets/braces, etc.
- Only as OO as you want it to be.
- More words and less cryptic symbols. I absolutely despise C and its ilk because of all the asterisk/ampersand/bracket/brace/parenthesis shit I have to keep track of. If x86 assembly wasn't so godawful itself, I'd even opt for that over C. At least it's easier to read what's going on. Some encourage C++ because of a "just throw 'em into the deep end" mentality. I did okay in C++ classes in college, but knowing that this is what the programming world was predominantly built on completely turned me off to it as a career. Oops, digressing...
Learn the C subset of C++. You will never have to throw any of it away but you can continue building your skills int until you qualify for a pretty neat job.
There isn't a scripting language around that has cleaner syntax, a more wellthought set of core concepts (http://www.lua.org), and a gem of a Programming-in-Lua book!
I taught the language with great success to several batches of undergrad students in a CS department in North East Africa - that experience alone convinced me.
It doesn't hurt that it is the fastest scripting language currently, and has a just-in-time-compiler variant that just beats them all (http://luajit.org).
And it's wildly popular with game developers, which novices would probably find enticing.
Just my 2 c.
If your looking for a simple language to start kids on, COBOL is pretty simple stuff.
Though it might give them the wrong idea about programing. It also isn't really fun, nor can you do "cool" thinks with it... so maybe not. You can make constructs and move data around pretty good, and I can make a mean text menu!
..or languages.
When I started computing in the early 80th there were plenty of magazines, which 'taught' programming. Small games, which explanations, which one had to type in oneself. This automatically invited to experiment with the code. Change a line here or there and see what happens. Today? Download everything from the internet. Even if the sourcecode is available, there is no real reason even to see it.
I would start with PASCAL or similar to teach basics such as for loops, conditional operators, boolean operators. Then to teach OOP I would probably use C++ (although if there was a simpler language available I'd rather not use C++ to teach OOP).
Life is about being a Phoenix!
Visual Basic Express is free and is easy to learn and powerful enough to do a lot of good things with it. Plus with mono it'll run on Linux as well.
Second Life has a very nice event based scripting language for scripting some life into your creations. The language is called LSL, very similiar to javascript or actionscript (don't really remember which, it's been a while) and very easy to get into as there are lots of tutorials and guides on the wiki which also explain simple programming concepts for people not yet familiar with programming.
The reason I suggest it here is because it produces enjoyable results really quickly. Most other languages you usually start with echoing 'hello world' and other text to the standard output, which really isn't that interesting. Drawing stuff like GUIs to screen usually gets complex really fast which you don't want in this case. In Second Life you can also start by sending 'hello world' to the chat, but right after that you can start manipulating the object the script is attached to and do some cool things really fast, like changing it's color or position. Making a simple vehicle responding to key presses should be a fun excercise.
Once you look past the flying dicks and crap spam, it's a really nice sandbox environment for experimenting.
I've never used Scratch or Scala so I can't really comment on those. FreePascal, Java and C# are all nice general purpose languages which are fine for learning. I wouldn't advise Python or Ruby as those are quite heavy on abstraction and syntactic sugar. (and c-style braces are better anyway, hahaha)
If your newbie cannot grasp Python syntax, this is a pretty clear indication that the newbie should not continue their pursuit of programming expertise, and should instead "rise" directly to management. If you don't think the actual execution of your code should change based on whitespace how do you propose the compiler or interpreter differentiate between goto12 and goto 12 ?
Note that I started with BASIC on the Apple II and use C, C++, Python, bash, html, Java, Javascript, et. Al. so I might be biased with actual knowledge of the subject matter.
Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
> Has the level of abstraction in computer systems reached a point where beginners can't just code
> something quick without a huge amount of back-story?
Yes.
I used to program in BASIC as well. It was logical and everything I wanted was on the screen. I was 10.
Fast forward 15+ years of not programming, and I've struggled over the last few years to understand the new concepts in programming. I have ideas that I want to implement and doing so in a Bash script sometimes works, but anything more complex is horribly difficult. GUIs are totally out of my league. Functions confuse me with their returns; why can't i just program the app as if it were BASIC? I tried taking Java courses and the concepts that were assumed to be known were far over my head; at a self-learning school (TechSkills) this was just a waste of money.
I think a big part is the difference between OOP and, well, non-OOP. OOP is implemented in Android AppInventor and after hours of following tutorials and *seeing the mysterious 'objects' on the screen*, which never made any sense to me (objects? its words!), I still have no idea why things don't fit together. Variables don't go where they should in my brain's logic. I was even this morning considering shooting a video of my fumbling, to see if people could identify a few places where I am missing basic concepts.
No, he was not incorrect. Your interpretation of what he wrote is in error. His point is that every language has a set of rules used to indicate scope. Indent blocks equally is no more difficult to grasp than wrap blocks of scope with { and } . In both cases it is a matter of what you get used to, and if you are used to one the other seems more difficult. Python indentation is "harder" if you are used to something else in exactly the same way that Linux is "harder to use" than Windows if all you have ever used is Windows.
Your "good editor" point works against you. A good editor will handle indentation for you in Python as well as it will with any other language.
Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
... there are fantastic 'teach yourself' books now published. There are primers that explain everything step by step. C++ console programming is perfect for beginners once you have c++ primer plus. It is one of the best books I have found for having the most cogent pedagogy. Stephen is really good at explaining everything so that you "Get it", plus it also gives you a language that *has power* so you're not stuck in la-la land.
http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326973/
I consider BASIC the primary reason why I'm a sysadmin now, instead of a programmer. The problem I had with BASIC is that after years of tinkering with it as a kid [TI 99/4A, C64, GWBASIC on PC], I had a horrible time learning to get away from the 'GOTO' way of thinking.
In high school, I took the "Computer Math" class, which was basically learning how to do algebra in BASIC. I took that class because I had experience with BASIC at home, and thought it would help bring me to the next level. It was only years later that I realized that I should have taken the "Computer Science" class, which taught Pascal.
As a result of only being exposed to BASIC, when I tried to learn other languages or do anything more complicated than drawing circles randomly around the screen, I could never get the hang of functions and pointers and passing variables or whatever. So I decided I was too dumb to be a programmer, and wasted all my time playing games instead. I think if I had taken the Pascal class early on, I'd have had a much better foundation on which to build.
In the years since, I've become somewhat proficient with bash scripting (with functions and everything) as a sysadmin. I can sorta-kinda read some perl if it's not too obfuscated. I keep trying to learn Python, but I don't do it often enough for it to stick in my head.
While I have no desire to push my daughter to be a programmer [or do anything computer-centric] I do expect to ensure that she's at least exposed to some sort of programming, so that she has at least a reasonable idea of what makes all her computers and gadgets actually work. I have no desire for BASIC to be the thing that I use for showing her programming. Perhaps LOGO [how can you beat moving a turtle around for a kid?], and maybe Python.
I like the idea of python because, much like BASIC back in the day, you can very easily start a command line interface, and get action immediately.
BASIC:
10 print"Hello"
RUN
Python
>>> print "Hello"
Quick and simple, but without the danger of getting stuck in the rut of GOTOs.
Nothing to see here
I'm not defending perl as the best language. But were talking about a starter language replacement for basic, and perl is super good for that.
Of all the O'reily pocket referecne books perl, is the shortest. Moreover the core language is not evolving and it can do an awful lot, very easily before you import any libraries. The same can't be said of any other language I know of.
It ubiquitously installed, and there is no compilation environment issue, or library linking. It's portable across machines. And it's machine model is pretty rich so you can interact with the OS very well.
PLus it's very easy to learn.
So I would say perl is the best BASIC replacement for starting programming.
Perl also happens to be one of the very best languages to learn HOW object oriented programming works. It's actually very brutal to do object oriented programming but it is the best one I know of to see how objects hold date, resolve inheritance, psedohash, or introspect. Other languages do all that but they hide it so well you don't have a good understanding of how they do it until you
After that I would reccomend python when it comes time to write re-usuable programms and modules.
Some drink at the fountain of knowledge. Others just gargle.
I would highly recommend PureBasic. It is easy to use, cross platform (Windows, Linux, Mac), compiles down to small exes. Once you have mastered the basics, It has easy to make GUIs, Networking, Serial Port control, 2D and 3D graphics, database access.
I have used it for several small commercial programs and highly recommend it.
It is free for small programs and cheap ($99 now I believe) for a life time license on all 3 platforms.
Object-oriented programming is a cult.
It exists to make it more difficult for people to learn programming.
It does not actually provide any of its stated benefits (such as code re-use).
Yes, it is nice to have big class libraries, but those could also be big function libraries with little change in benefit.
My first language, which I started out with in junior high school in the 1970s, was APL. This language is easy to learn and quite powerful. There is a free version currently available called NARS2000. A successor language called J (which doesn't use a special character set) is available for free download from www.jsoftware.com.
The gnome project has Genie dialect for the Vala compiler... compiles to old plain C code binded to the gObject library as oop runtime
I'm 14, so this comment is obviously a little biased. Anyway, a big problem for me has been that, for almost anything you'd want to do, there's a program that already exists that does it. I mean, back in the BASIC days, if you wanted to do anything useful, you had to do it yourself.
My first "computer" was a hand-built 2650-based system with just 1Kbyte of RAM and the only programming language available was machine code (hand-coded from assembler and) entered through a hex keypad and debug ROM monitor.
You kids with your BASIC, Ruby, Javascript etc, you don't know how good you've got it :-)
I was pleasantly surprised that MATLAB rekindled the same sort of feelings I had when I was growing up coding BASIC on my old TI-99 and Color Computer. It's not terribly complicated because it has a limited-scope purpose, and you can learn it in stages, which lead all the way up to being able to control physical systems with it.
So they'd have to learn LISP before they learned LISP.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Many games today come with built in scripting engines. You can learn how to program and have instant gratification of seeing your work being rendered in a 3d intractable environment immediately. I remember seeing a friend learn about object oriented programming by scripting for Unreal Tournament. Pick almost any game and you can start to script for it and it's fun. Just let your imagination come up with all sorts of ideas you wanted to do in game, and go program it. There's no real need to go build your own 3d engine or even have to worry about 3d graphics when you start programming, yet you can easily make use of it all.
BASIC, FORTRAN and COBOL were not so helpful, though BASIC wasn't as toxic as people claim it is.
Batch programming in DCL (The Vax batch language,) DOS Batch files, UNIX Shell Scripts and IBM's REXX (OS/2 and VM/CMS mainfraimes) was also helpful because when I was doing it I was usually trying to accomplish something. REXX actually had useful data structures in it too. Running up against the limitations of these languages and trying to figure out how to work around them was a good way to learn, as well.
Java might be OK if you implemented a framework to build into. I've been working with Jmeter lately and it's kind of neat in that you can use it for what it's designed for but if you run into something it can't do you can always write your own extension to it, bundle it into a jar file and drop it into a directory in order to extend the functionality of the system. You can shield yourself from complexity of the system that you don't necessarily want to be exposed to and focus on just the bits you want to change. Perhaps a java-based turtlegraphics system that could be extended like this would be in order. It wouldn't be hard to implement in android or on a PC.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
I'm surprised no one has suggested it, i found it to be a really easy and well done language.
Comment removed based on user account deletion
Try out boo... http://boo.codehaus.org/
If you won't, then let me advocate Pascal. ISO Pascal adopted most of the OOPL extensions added by Borland's Pascal 4 and Apple's Object Pascal. The resulting OOPL retained most of Pascal's simplicity while integrating all the essentials of OOP. And unlike any practical OOPL I know, ISO Pascal is still explicable in a book of less than 200 pages.
Today's ISO Pascal is that rare example of a language that has escaped the curse that befalls more popular tools -- the accrual of ugly cruft and dross in order to silence too many squeaky wheels.
This became a very interesting discussion. I don't think I have ever bookmarked more sites in one day than today. And I don't program for a living any more. Always a geek I guess. Nice to know I'm not the only one.
Beware of cheap imitations.
You would be surprised. There's still something profoundly and inherently intoxicating about getting a computer to do your bidding for the first time. I was pretty jaded when I taught Scratch to elementary school kids for the first time last spring, but you should have seen how their eyes lit up when I showed them how to put the logic pieces together to trigger a simple, "When I click this button, make the cartoon cat spin around in circles." I guess what I'm trying to say is, be careful not to be so quick in passing off your own jadedness on to little kids who are still amazed by everything.
My candidate for this generation would be HTML5 and Javascript. Fast, lightweight, instant gratification, and with canvas and audio it's an instant win. Also, everyone has a web browser (with Command-Click and View Source, probably with syntax highlighting) and it's probably the easiest type of programming to find "on accident". I discovered programming when I was poking around on my brother's old 486 that had QBasic on it. I loaded the program up, found nibbles.bas, and my life changed dramatically since then.
I started using Pascal on a TRS-80 Model III back in 1987 and I still use it today. In fact, it's one of the easiest cross-platform languages to use for me since I use Free Pascal, which has a compiler for a lot of platforms, and Virtual Pascal. Both are free to boot.
The problem these days are kids have no patience and no attention span. They want to have it their way right damn now and forget actually trying to learn something and appreciate the value of learning and hard work. I get laughed at by my peers when I tell them I still prefer Pascal over any other language I've tried to use yet when pressed, they cannot tell me why Pascal is "dead" and why they wouldn't use it for developing anything. I guess they've never seen Lazarus and FP at work.
I will admit I also use REXX and I cut my teeth way back when using BASIC on a Coco 2 and a Commodore 64.
Like I said earlier, kids today are generally too stupid to want to learn and create-they want something given to them so they can sit on their ass and do nothing.
Personally, I think something like basic is one of the worst languages to start with if you are interested in learning how to program. Sure, it is relatively simple, but therein lies the problem. Basic fosters bad programming habits that tend to transfer over to other languages. I would even recommend avoiding C when starting, even though it is pretty much the backbone to everything out there. I know many excellent C programmers who are very intelligent, but found it difficult to transition over to an object oriented language. I would recommend either C++, Java, or C#. Java and C# are pretty much the same and simpler than C++. C++ is more difficult, however it forces you to think about your applications much more carefully, and if you know C++ transitioning to another language is pretty easy. C++ also exposes you to C. Regardless of the language you choose to learn I would highly recommend picking up a book on design patterns and antipatterns.
Personally, I grew up learning the C-base programming language ( not C++) and, in these days, I'm learning Assembly language programming in x86 and x88 ( because they're identical to each other -- i.e., both is implemented with parallel processing, as far as I know of these two ).
Others might agree or disagree with me, depending on their experience, and the syntax implemented in each language they feel comfortable with.
Even though that I know some people will try to coerce me to learn Java ( in universities, especially ), I'm not leaving the C language behind because of it's capabilities that I'm familiar with ( I hate data classes because they're so mind-blowing, in my opinion ).
Others might even focus about the web developing and leaving the hardware issues we're dealing with under nowadays basis. For example, some told me "hardware programming has no future in it, while web developing has a great deal in the Internet". Well, I have to say that I agree with the deal in the Internet, but I would disagree with the point about the hardware, because the hardware is what eases our nowadays activities like phones, gaming gloves, additional interfaces in the mouse treated as tweaks ( specifically, World of Warcraft gamers demand such tweaks, some, if not all of them ), Network programming ( I recommend people to learn network programming from this book "Linux Network Programming", which is basically limited to Linux and it's done in C programming language ), Linux kernel programming ( Linus Torvalds is a great example here, seach for a book called "advanced Linux programming), and the head-mounted controller. So, there is a lot of hardware programming involved in here which I don't see how it's possible that it has no future.
I had friends who argued with me for only dealing with C/Assembly, but I'm just saying that I'm fine with those languages. However, if they disrespect my opinion about what language I want to use, then there is no need for me to listen to their opinions. The same issue goes with the BASIC programming language. Some people hate it, some people like it, according to their point of view which might be convincingly reasonable or plain lame. If it's the syntax, I can't see the problem with it, which is so far so good.
You don't know what you're talking about. Its all about context. Where i learned programming in the 70s, there was batch FORTRAN / PL/1 & COBOL, and time-shared BASIC. It was the first time the computer talked back to you in real time.
Hewlett-Packard made a fortune off of their HP2000 series. Those $250k minicomputers were replacing million dollar mainframes and giving the users power and control. There was a free library with thousands of programs. You could modify them yourself. They were used in research, education and business and everyone was happy. It was fun!
In my high school, the BASIC programming classes were filled and the terminals were occupied from 7AM until after dark. You could get up to speed quickly and make some really cool stuff. I wrote an instant messaging program in 1975 that was not even supposed to be technically possible. There was an intense sense of competition between the students to learn the entire language, and it gave a focus to kids who weren't playing football or taking drama classes.
With the HP2000, it wasn't just the BASIC language, it was the operating system. You could do things on your terminal that would goof up the other guy. You could share data between users. You could execute operating system commands form within your programs. You got to learn about security and infrastructure, at a very basic level, which stood you well for future endeavors.
The HP2000 evolved into the HP3000 which was widely used from the mid-70s until 2000 when HP discontinued support. There were still a lot of BASIC programs being written up until the end.
Other contemporaries were programming BASIC on DEC PDP hardware. There was another entire infrastructure there that was vibrant and thriving, and BASIC was an integral part of it. Data General was another minicomputer vendor with an entire ecosystem of which BASIC was a part.
I taught the BASIC class in my senior year. When I went to college, my instructors let me skip introduction to structured programming - I had self-taught myself this concept without even realizing it was the most logical way to write code.
A lot of us kids went on to very successful careers in DP as it evolved into IT and learned new languages and operating systems and did quite well, thank you. We started with basic and evolved to cross-platform integrated development environments. I was lucky to meet the guy who decommissioned our school's computer and sold it for scrap in the 80's. he had an image of the last backup taken before disassembling the system. Through the use of SIMH, I have that system running in full on my MBP. I can run the Star Trek and Blackjack games from my high school days.
BASIC taught you the basics, and laid a basic framework to learn everything else that came after. It was also a useful tool for writing your own programs in an era when most computer users did that instead of buying software. Nobody I know uses the same stuff at work that they learned in high-school/college. Go find something else to rant about.
It's wasn't crap and you don't know what you're talking about.
Ask Me About... The 80's!
Check out this http://www.squeakland.org/ . It came from Smalltalk, I guess, and has lot's of visual reward for the kids, very educational. And prepares for OO. It has been tested along OLPC project and has had very good results. Worth a try
The language you use is not the big issue. Languages are easy to differentiate and easy to learn. Some languages are better than others depending on the environment and application specific requirements. My pet peeve is that most programmers don't understand how to get maximum efficiency out of the HW and OS environment. This translates to poor performance and a frustrated user experience. Developers today seem to settle on iterative releases to iron out performance issues that should have been addressed in testing. Their solution is fix it in the next release and let the users sort out the bugs.
What about "C"?? You can get the Watcom compiler and "code away" in "C" for free. Basic was ok in that it let "non programmers" program, but frankly, in terms of "coding" It really was a rather limited interpreted language.....not unlike (but far inferior to) scripted languages like Javascript and others. IMHO Microsoft "bastardized" the term BASIC as a programming language with its many "kit bashes" of the language and misuse of the name. Same as "C#" just a marketing attempt to hitch your wagon onto a industry standard and give it credibility with the "masses" while hiding the fact it is a Java CLONE. BASIC was written in 1968, and was a "1st / 2nd generation language, any attempts to update have it miming "C" and similar languages, therefore ceasing to be BASIC and becoming something else.
"Any sufficiently advanced technology is indistinguishable from magic." - Arthur C. Clarke
I'm pretty shocked that nobody has mentioned Actionscript. The SDK is open-source and free, there are tons of tools available (also for free), but if one wants the benefit of a GUI to help lure kids in with animation and obvious one-to-one code to graphical object correspondences, there's that option, too, for fairly cheap. Not to mention the enormous industry supporting Flash as a viable career option (HTML5 folks: you can do a hell of a lot more than just program hacky websites in flash; it's a fully interactive development environment for a number of things, the least --at this point in time-- being the web).
Back in the day I remember picking up as2 in a couple of days having come from a solely design background and now, knowing AS3 and the OOP concepts that it's taught me, I've been able to transition to a number of other programming languages with relative ease.
Highly recommended for any student.
Try GAMBAS on Linux. If you like BASIC, you'll never look back.
http://gambas.sourceforge.net/
Buy your next Linux PC at eightvirtues.com
I do not see a recommendation for Lua, which would be useful for an aspiring programmer. Lua is embedded into many video games and tools (WoW, wireshark, and VLC to name a couple), has a stand-alone interpreter, and uses a clear and simple syntax with a mere 17 keywords.
Primitive types are converted automatically, and the one object, the table, can be used as an array, a map, or both in the same table. The table can be used as a namespace for functions (actually all data, including functions, is stored in the global table, _G), as a prototype for objects, or simply as an array.
Functions can take and return a variable number of arguments. The language itself is free, as is the book and the reference manual. The website also features a live demo with example code.
Download a copy of VICE and install it on your Linux/OS X/Windows box, and learn basic properly.