Introduction to programming class: use Spreadsheets to introduce fundamentals Are there any "pros" or "cons" I have overlooked regarding using Excel
  as a means to introduce a range of fundamental programming concepts.


This question relates to teaching a programming module at secondary school final year level (one level below first year of university).  I use Python.

Learner profile

Learners often have no programming or web design background.
Some lack essential computer literacy skills- creating and saving files, installing applications and so on (I get a diverse group and have no say in selection)
Learners are all adults, ranging typically from 21 to 61.
Many have been out of education for a number of years.

Rationale

Many beginners find using the terminal and IDEs to be quite alien.  Add to that the need to understand key concepts and apply them, it may present a "barrier to entry".  Using an application that they may have encountered before and likely have on their own computers (when they have one) may allow learners to grasp key concepts in a more "familiar" environment.

Syllabus

These vary widely, so rather than include "fluff" on the particular one I have to work with, I'll expand on the relevant elements below, which are likely relevant to any introductory programming course.

Relevant topics to explore in the Introduction

I'll try to be succinct but can expand on any topics in the comments


Variables: cell ref ~ address in memory- not user friendly. Name a cell- can be used in expression, like a variable.
Operators and BEMDAS
Syntax
Boolean AND OR NOT
conditional statements
built-in functions
create a User Defined Function (possibly- not sure on this one).


Pros and Cons

I've mentioned some of the pros, as I see them.  I cannot think of any cons at the moment: 


  Are there more pros I've missed, are there possible downsides, and has
  anyone tried using this before?
Spreadsheets are probably the most popular functional programming language, and is is some what visual. I have taught it for years 7 to 9, but not part of a qualification based course.

Things to be aware of:


It is a functional language, as long as you avoid VBA / macros etc.
You can do functions, though I am not sure about named functions.
I like to put intermediate calculations in to hidden columns. The alternative is very complex formulae / functions, that are hard to read, and hard to write.
The hard part is making it relevant. Don't make all of the exercises about accounting.
Provide spreadsheets that are started, and give them exercises to add/change something.
Don't assume that this is relevant, to them, or that they have any experience. Ask them, give them a choice about how they learn.
If the data sets are too small, then it will not seem relevant, as you could do it my hand more easily.
There is a lot of copy/paste in spreadsheets, this is the main downside, but to use them well you need to embrace it. This is not so for any other, good, language. In the first lesson, have them enter formula, for about 10 rows. Then show them how to use the little dot in the bottom right of the cell, to make it easier. They love this.
Whenever I am teaching programming, I tell them that I am teaching them to be lazy. This helps to engage the lazy ones. Sometimes a hard worker will comment on this, but I tell them “don't worry, one we have learnt to do it the easy way, then this allows as to do more stuff.”.
Most of what you do in spreadsheets can be done in python (except data entry), so you can link it to the python lessons.


While being a good introduction to functional programming. I do not think it is a good introduction to programming. It may be of some help, but I do not imagine the pace of learning will be high.

Most people start with Scratch. The main barrier with this language is that it seems childish (it is taught to primary school pupils ( ≤ yr 6 ). There is another language call snap. It is like scratch, but taught to 1st year undergraduates. It has some extra features, such as create your own functions. With Scratch you can create your own procedures, but not functions. Both of these languages are available as a web service, scratch also has a desktop app. Both you can download and host locally (if internet access is poor).



With snap you can make it look like any other language. I have made it look like python. Unfortunately I could not get all of the blocks to work, but I did use them to create a printed work sheet scratch to scratchy python to python (they did not know that I used snap to help me create it). You can also teach snap to auto generate code in another language. E.g. write program in snap, click generate, and get a python program (I have not properly tried this).