Years ago, I used to suggest Visual Basic 6 to rank beginners as a way to learn what programming is. Key point: This was NOT for career training, but just as a primer to the basic concepts of programming. I subscribe to the KISS principle (many programmers do not) Detest Microsoft as we may, the instant graphical nature of VB6 really helped kickstart things for the rank beginner (GUI control methods/events vs, cmdline programming)
VB may have been a “toy”, but it allowed real programming concepts to be applied. One could learn these UNIVERSAL topics in any language, including VB6:
- Datatypes, variables and constants
- Conditionals (If….Then….Else Blocks, Select Case)
- Random number generation / seeding
- Introduction to threads/timers
- Loops (while loop, for loop)
- Functions & procedures (and passing parameters)
- Using arrays
- GUI controls (properties, methods and events)
- GUI animation (manipulating top, left, visible properties)
- Creating and adding external modules
- Debugging (breakpoints, watches, debug window)
What environment or platform would you suggest to use today? Is Java/Eclipse making things too complex? To some extent, I think Java is overkill for this type of goal (OOP, etc). Would the path of least resistance be Visual Basic Express Edition 2012? or something else entirely like some sort of smartphone IDE? Or is that just too distracting, too complex, or too easy? And what do you lose compared to VB (Think how trivial it is to learn basic animation with the Timer and .top and .left) The KEY is to keep it EASY while not watering it down.
Again, suggesting some esoteric language just because it’s more “elegant” misses the entire point. What would you tell your neighbor’s 15 year old kid to use if he wanted to know what programming is? (He does not want to become a professional programmer, and is not a good independent learner)
Thank you.
11
Its the results that matter – the satisfaction that you just made the computer DO something. That’s what matters, in my opinion.
In other words, find something the kid wants to do and then use the simplest language to accomplish the task.
That’s what basic was good for – it was readable, but it produced results that made you want to explore further.
I’d probably go with python. Maybe make a command line app that plays a wav file. Then as input, use a funny wav file 🙂 You can then extend it to essentially become a sample bank. Kids usually get a kick out of stuff like that.
One reason I suggested python is that if you’re successful in whetting an appetite for programming, kids will try and do more using what they already know. Python is a very relevant language and comes with a very rich library, which means what they can do with it, is a lot.
The other reason I suggested python is that with the language, the rule usually is: “The obvious way is the best”. This encourages exploration and intuitive discovery, which, when combined with the fact that Python is actually used in production environments today means that it can translate into a real advantage down the line.
2
For interactive learning, you might investigate something like Alice or Scratch. Both systems are graphical, designed for learning, free, and supported by large universities.
1
The first ‘programming’ I did was putting together TTL logic gates. Later, I grew up with BASIC and the BBC micro – a computer was something that sat in the corner and let you play sprite based games or do calculations or print letters on a dot matrix printer ( or generative art ). At university I got a warning from the department that my fractal generator was in the top ten cost items on the mainframe budget – but you needed something costly to do 2D graphics. My MSc was Phong shading surfaces in assembler, and a 386 based computer was just becoming a 3D graphics workstation. By the early ’90s the web meant a computer was part of a world-wide research library. By 2000 a computer was starting to become primarily a means of communication, not computation. In 2013, computation has fragmented again – I have a workstation/games machine for 3D graphics, a tablet for reading books and web pages, and a few embedded Arduino and raspberry pi systems which control electronics and provide music. A lot of my current research is based on sensor nets ( formally called ‘ubiquitous computing’ before computing became ubiquitous ).
So what actually is programming about now?
Apart from C++, I can’t think of anything which runs on examples of all those above, but for most tasks there’s a more specific language to take away some of the pain.
I wouldn’t expect someone who isn’t planning to become a programmer to want to learn programming for its own sake. But I would expect anyone to get some satisfaction from taking a topic that they have an interest in and then creating something which relates to that.
If the interest is ‘desktop computer’, then perhaps Python on Raspberry-Pi – it’s a BBC B for 2013.
If the interest is ‘tabled computer’, Android. The tablet is probably already the default computer for personal stuff. Create a simple game or controller.
If the interest is ‘social computer’, probably Python again, or Java and Hadoop – either way concentrating on algorithms and parallelism and connecting to web pages. Don’t bother with details, but the algorithmic thinking and visualising how data can be correlated is probably going to be more useful than any syntax or type system.
If the interest is ‘3D workstation’, you can do some beautiful things with either processing or cinder. Maybe through in a kinect into the mix. Making something beautiful which ‘comes alive’ in response to its creator is very satisfying, even if a bit Frankenstein. ( I found the cinder tutorials very good and easy to follow, but I’m not looking at them as a novice )
If the interest is ‘sensor nets’, then Arduino, which uses a very simple subset of C++ to add behaviour to the real world.
Of course these intersect – it’s quite fun to create an Android app which controls a model train via Arduino, or a Processing view of your friendship graph on Facebook. But I’d look at what interests the audience, and focus on algorithmic thinking, privacy and why computers do the silly things we’ve told them to more than a particular language.
2
It’s very hard to suggest something without thinking about the target audience. ie. University students would have a very different set of learning requirements to high school kids.
My suggestion would be to start with something that has a really simple GUI based IDE that lets you quickly and easily assemble a program with a minimum of technical requirements. So VB may still be a good choice in that regard. This lets you teach the basic ideas of coding such as how to make things happen when a button is pressed, basic code statements such as if/then/else and loops, and such things as graphics, i/o and simple networking.
Then I would pose the question of “How would you create a web or data server for the apps you have built?” and lead the students into the concepts of non-GUI based programming. At this point it might be a good idea to switch languages as well to something like Ruby or Node or something that is well suited to server concepts, yet can still keep it simple.
Along side this you can start to look at things like practices and patterns to introduce the concepts of design into the equation as at this point, the students work is likely to start getting complex enough to warrant discussions on these topics.
I guess my goal (and here I’ll say I’ve no teaching experience to draw on) would be to teach the basics, but also give the students a view that covers more than just one language and method of development.
I believe that the most important thing you can teach is not any particular IDE or language, but the ability to analyse problems and determine the best tools to solve them.
1