Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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.

share|improve this question

closed as not constructive by World Engineer, Jim G., JeffO, Walter, BЈовић Feb 10 '13 at 23:24

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

1  
The reason people might suggest 'esoteric' languages is that your 'UNIVERSAL' topics simply are not universal, but are merely those which most of the ALGOL family happen to support, and the inadequacies its legacy has left us. Teaching people to rely on a debugger is like teaching a learner driver to rely on ABS. –  Pete Kirkham Feb 10 '13 at 22:13
1  
Good question, but what defines VB as a "toy"? What makes other languages "real"? There are certainly plenty of VB6 applications that still make real money for the authors or the users. –  Zachary Yates Feb 10 '13 at 22:41
    
Well, according to Edsger W. Dijkstra (among other things, winner of the 1972 Turing Award) Basic "... mutilates the mind beyond recovery." Pick a serious programming language: e.g. Pascal for imperative, Smalltalk for object-oriented, SML or Scheme for functional, etc. –  Giorgio Feb 10 '13 at 22:54
2  
@Giorgio Basic of Dijkstra's day is not the Basic of today. Php is more likely to do permanent harm. –  MichaelT Feb 11 '13 at 0:50
    
Pascal, Smalltalk, Scheme? Are you serious? (Slaps forehead) I tried to be as clear as possible that this are not university level COSC majors. –  JackOfAll Feb 11 '13 at 0:52
show 6 more comments

4 Answers

up vote 5 down vote accepted

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.

share|improve this answer
    
Exactly! Just getting the computer do do something. Even 10 PRINT "John"; 20 GOTO 10 was a huge thrill for a kid in the 80s. So, again, KISS is at play. I will check out Python and see if it applies to me needs. Playing a WAV file is too complex unless there is an API that has a PlayWAV() method! But, that's not classical programming, that's just a function call. –  JackOfAll Feb 11 '13 at 0:47
    
Here you go. 3 Lines : stackoverflow.com/questions/307305/play-a-sound-with-python –  Carl Feb 11 '13 at 0:48
add comment

For interactive learning, you might investigate something like Alice or Scratch. Both systems are graphical, designed for learning, free, and supported by large universities.

share|improve this answer
    
+1 For scratch: My nephews have really taken to it. –  Peter K. Feb 10 '13 at 22:26
    
Thanks. I'll take a look at both. I don't want a "toy" that is watered down for 3rd graders, but, this is not university student level either. –  JackOfAll Feb 11 '13 at 0:47
add comment

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.

share|improve this answer
    
Another vote for Python. Can you do GUI programming in python? Like moving shapes around the screen, updating the .top and .left? Or responding to GUI events like button_click() ? Or is Python more a Perl style scripting language? –  JackOfAll Feb 11 '13 at 0:49
    
I've used Python's Gnome bindings to make small forms based UIs. There's also PyGame pygame.org which I haven't used myself but looks like it would do that. –  Pete Kirkham Feb 11 '13 at 9:21
add comment

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.

share|improve this answer
    
Yea, VB surely meets that stage 1, which is all I am interested in. Webserver, OOP, and database/SQL server is way out of scope in terms of simply learning what programming is,and how to make the computer do some basic stuff you tell it to do. –  JackOfAll Feb 11 '13 at 0:50
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.