We teach many delegates how to program in "xxxx", where xxxx is a language such as Perl, PHP, Python, Lua, Ruby, etc. Some of those delegates arrive with us with prior programming experience, and require what is in essence a conversion course - the base concepts from Pascal will set them in good stead for Python, and a Matlab programmer will see some familiar things in Perl. Other delegates are completely new to programming, and need to cover those base concepts that are common to every langauge in addition to learning how those concepts are applied in the particular language that they're learning.
From the early days of our Perl courses, and with PHP too, we've long provided a learning route for delegates who have never programmed before. In both of those cases, the "metrics" of the use of the language were such that people would often be given a programming role in addition to their normal job - along the lines of "you're a system administator - please automate that task as it's repetitive" and "you've written an excellent web site for us - please add some functionallity such as an ordering system". Often these requests to add programming to a job description were seen as trivial by the manager doing the addition, and I've seen some poor delegate caught like startled deer in the headlights of the juggernaut of programming; I'm relieved to report that these days there's an appreciation that it takes time and practise to learn a major new skill.
Over recent years, we've seen that newcomers to the other languages we teach - Lua, Ruby, Python, C, C++, and Java - have also had a growing trend to starting with no prior programming experience. Such delegates are still very much a small minority - but a significant one. How can they best learn the new skills they need?
The traditional approach is to suggest that the delegates go to a local college or night school in their area to learn programming principles - but that means a long elapsed time, and a need to the unlearn / convert a great deal of syntax detail
. Another approach has been to suggest book-learning or e-learning of the concepts but there's no-one to ask when you get stuck, you have the conversion issue, and it's often hard to see how the theory you're learning applies to the practical things you need to do
A couple of years ago, we experimented but in an educated way. We added - onto the front of our entry level courses - an extra day entitled "learning to program in ...". Very often, the extra day was on a Sunday (as the schedule was already published a year ahead with monday start courses!), and a couple of profits of doom suggested that we wouldn't get (m)any takers. But then, quite frankly, I was looking to provide a service when it was required - not to fill a schedule, nor to make a lot of extra money out of these people, and I didn't (and don't) mind if the extra day runs or not, or whether it's for a single delegate or more.
The experiment has turned into a big success - it makes a significant difference for the people for whom it was put on in the first place. They
are, it turns out, usually prepared to give up part of their weekend to attend a course - it shows a committment to their employer, and their additional role. They are delighted to have a tiny group, and to have a course that's run at their pace, explaining the principles of named variables, sequences of commands, conditions and loops. And also explaining good practise right from the start - the need to comment code well, provide user documentation, and to avoid code duplication which would escalate the maintainaince tasks later on.
The delegates are more than happy to be learning the principles of programming in the language they'll actually be using, rather than having to switch midstream when they've already got some of the way. And the delegates are delighted to be able to ask / question / query issues with the course tutor - someone who's fully aware of the principles behind what he's teaching and can help guide them in the right direction, and re-explain concepts they find hard in a whole variety of ways.
Come the second day of a "Learning to program in xxxx" course, and we're joined by delegates who have programmed before, but not in xxxx; the newcomers to coding have a firm starter - their legs are under the table, and as far as their concerned there's a revision and consolidation element of the fundamentals, with an extra light being shone onto the langauge being taught by the differing backgrounds of the additional students.
Yesterday, I taught "Learning to program in Ruby" - the first day. The examples were all written in front of the delegate(s) and will be reinforced today in a couple of hour time. But I do know that I generated an enthusiasm, and I saw some real - if short and straightfoward - initial programs. And i know we're in for a great rest-of-week!
Republished here - for yesterday's delegate - the examples from my system:
A first program - output a message
Variables and calculations
Read from user, calculate, output
Prompt, read, echo, calculate, output
Optional code and repeated code
Repeating until some condition is met
First steps in analysing a big file
A practical log file analysis example
for details of the the next "Learning to program in Ruby" course.
for details of the the next "Learning to program in Lua" course.
for details of the the next "Learning to program in Perl" course.
for details of the the next "Learning to program in python" course.
for details of the the next "Learning to program in Tcl" course.
for details of the the next "Learning to program in C" course.
for details of the the next "Learning to program in PHP" course.
for details of the the next "Learning to program in Java" course.
for details of the the next "Learning to program in C++" course. (written 2010-09-28)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articlesQ100 - Object Orientation and General technical topics - Learning to Progam 
Reading and checking user inputs - first lessons - Ruby - (2013-02-17) 
Flowchart to program - learning to program with Well House - (2012-10-14) 
Some terms used in programming (Biased towards Python) - (2011-12-12) 
Learning to write good programs in C and C++ - separating out repeated code - (2011-01-04) 
Programming Standards from the start! - (2010-08-02) 
I almost put the bins out this morning - (2009-11-16) 
Learning to program in ... - (2009-11-15) 
Learn a new programming language this summer. - (2009-08-06) 
Can you learn to program in 4 days? - (2009-07-16) 
New to programming? It is natural (but needless) for you to be nervous - (2009-07-14) 
Tracking difficult bugs, the programmer / customer relationship - (2009-03-20) 
Learning to program in PHP, Python, Java or Lua ... - (2009-02-19) 
I have not programmed before, and need to learn - (2009-01-19) 
Learning to program as a part of your job - (2009-01-10) 
Best source to learn Java (or Perl or PHP or Python) - (2008-12-28) 
Learning and understanding scripting programming techniques - (2008-04-08) 
The next generation of programmer - (2004-11-13)
Some other Articles
What is a factory method and why use one? - Example in RubyCreating, extending, traversing and combining Ruby arraysWhy do I need brackets in Ruby ... or Perl, Python, C or JavaFormatting your output - options available in RubyLearning to program - where to start if you have never programmed beforeSome more advanced Perl examples from a recent courseShould the public sector compete with businesses? and other deep questionsPerl - doing several things at the same timeWhat does blessing a variable in Perl mean?Well House Consultants - a potted history