Answers.Body: <p>I agree with most of the other answers, but I wanted to add another way to look at it:</p>
  
  <p>I think one of the biggest downsides of using spreadsheets to introduce programming is that it reinforces a lot of stereotypes about programming, which turns off a lot of people who might otherwise have been interested in the subject. If the first day of my first programming course was "okay, now open up Excel..." my eyes would have glazed over and I would have thought "maybe this programming stuff isn't for me after all..."</p>
  
  <p>Programming is more than just ones and zeroes or staring at spreadsheets. There's a <strong>craft</strong> to it, if not an art, and it opens up a ton of possibilities for expressing yourself, communicating ideas, and accomplishing your goals. I think that's the stuff you should be highlighting in your first course.</p>
  
  <p>And since you're working with students from diverse backgrounds and of under-represented groups in computer science, I think you should be very aware of the effect your class has on their interest.</p>
  
  <p>At the risk of repeating an answer I've given before, I'd like to point you to <a href="http://processing.org" rel="nofollow noreferrer">Processing</a>, which I think is perfect for the type of class you're teaching. See these other questions for more info:</p>
  
  <ul>
  <li><a href="https://cseducators.stackexchange.com/questions/2793/order-to-teach-topics-in-an-intro-programming-class/2798#2798">Order to Teach Topics in an Intro Programming Class</a></li>
  <li><a href="https://cseducators.stackexchange.com/questions/19/using-processing-as-an-entry-point-in-an-introductory-course/2920#2920">Using Processing as an entry point in an Introductory Course</a></li>
  <li><a href="https://cseducators.stackexchange.com/questions/161/programming-languages-specifically-designed-for-beginners/173#173">Programming languages specifically designed for beginners</a></li>
  </ul>
  
  <p>Shameless self-promotion: I've written a bunch of tutorials that start in Processing and then "graduate" to more advanced topics available at <a href="http://happycoding.io" rel="nofollow noreferrer">HappyCoding.io</a>, and I think they're pretty amenable to a classroom environment.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T19:14:16.797Z
Answers.Text: @Kevin Workman, really good point.  Who wants a boring Introduction?  As someone said in another response- we need some fun in there too!  I may demo some of the work of previous years students to show what the end-goal is.  I've read through those links as well- there were some really nice suggestions in each.  Processing looks pretty nice, and although I am happily married to Python, I am tempted to cheat, or even have an affair with Processing.
Answers.UserDisplayName: srattigan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T19:16:17.457Z
Answers.Text: @srattigan In that case you might look into using [Processing.py](http://py.processing.org/). See [this answer](https://cseducators.stackexchange.com/questions/3374/ide-vs-editor-and-terminal-for-cs1/3388#3388) for more info.
Answers.UserDisplayName: Kevin Workman
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T17:02:48.007Z
Answers.LastActivityDate: 2017-08-30T17:02:48.007Z
Answers.UserDisplayName: Kevin Workman
Answers.Body: <p>Perhaps you should first examine the goals you have for your students. Where do you want them to end up. You describe them as pretty unsophisticated in computing when they begin. The students you describe aren't completely unique, of course, but are not the typical high-school or college student. </p>
  
  <p>If all you want is to give them a little bit of a glimpse of programming in a more general course, then your approach seems fine to me, though I would probably do something different. </p>
  
  <p>If you feel that spreadsheets would be an especially useful thing for them to know more deeply, then certainly what you are doing is fine. </p>
  
  <p>However, if you want them to be able to use some general purpose programming language eventually, then it seems to me like you are taking a detour that isn't getting them close enough to the goal to warrant the time and effort. </p>
  
  <p>User ctrl-alt-delor <a href="https://cseducators.stackexchange.com/a/3419/1293">suggested</a> simple programming environments like <em>snap</em> and <em>Scratch</em> which offer a more standardized introduction to programming and that aim more directly toward that goal, if it is, indeed, your goal. </p>
  
  <p>But start with the goal and work from there. Don't take too many side trips or trips that later need to be worked back from. </p>
  
  <hr>
  
  <p>Sorry, I should have said initially, that if the students already have some fairly deep understanding of spreadsheets, what they do, and how, then this is a much more natural kind of thing to do. However, if they are also naive about spreadsheets, then this might create problems instead of help overcome them. But you need to asses your own students, of course. </p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T19:02:54.740Z
Answers.Text: I like to try different things every year.  Some work and some don't.  This would not be a major part of the course, just an introduction before moving on to writing Python code in NotePad++ (and later- in the follow-on module- PyCharm).  For this module they must understand the elements in the intro, and be able to create flowcharts, modular programming (files and functions, imports etc.).  Some may be familiar with Office, and some likely will not.
Answers.UserDisplayName: srattigan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T19:07:25.647Z
Answers.Text: Good, then. A wise friend of mine has advocated for a long time that a certain part of every course (I think he says 10%) should be experimental. Try something new and evaluate it. But also be prepared to compensate if it goes especially badly. It also makes it less boring if you have to teach the same courses repeatedly.
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T19:46:37.333Z
Answers.Text: I never know what the students are going to be like until they start, so I'll know next Monday.  It looks like there can be benefits to using Excel: if they have some knowledge of using it, vars, expression and functions may be grasped more readily.  On the other hand, it's not very exciting.  Scratch and Google Blockly are arguably more "fun", but it was considered useful by about half of last years cohort.  Another "new" thing to try is batch file scripts... there really are so many options I can use that getting the right balance is difficult.
Answers.UserDisplayName: srattigan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T17:22:30.230Z
Answers.LastActivityDate: 2017-08-30T19:34:12.760Z
Answers.LastEditDate: 2017-08-30T19:34:12.760Z
Answers.UserDisplayName: Buffy
Answers.Body: <p>I think it is an excellent idea. I have taught both programming and introductions to Excel.</p>
  
  <p>A few quick ideas:</p>
  
  <p>You can teach "debugging" by having sum formulas refer to the wrong range, especially by walking them through editing a sheet so they are led into the trap of the sum not being updated.</p>
  
  <p>Excel is an excellent tool for string manipulation - you can write formulas to take strings from a couple of columns and concatenate them, adding fixed separator characters.</p>
  
  <p>You can add conditional logic to string manipulation, varying the way you concatenate depending on another column, say a salutation.</p>
  
  <p>Computer Graphics can be taught, maybe by customising some samples, because you have access to the <a href="https://msdn.microsoft.com/en-us/vba/excel-vba/articles/working-with-shapes-drawing-objects?f=255&amp;MSPPError=-2147217396" rel="nofollow noreferrer">Shapes API within VBA.</a></p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-01-24T11:59:06.960Z
Answers.LastActivityDate: 2018-01-24T11:59:06.960Z
Answers.UserDisplayName: Andy Dent
Answers.Body: <p>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.</p>
  
  <p>Things to be aware of:</p>
  
  <ul>
  <li>It is a functional language, as long as you avoid VBA / macros etc.</li>
  <li>You can do functions, though I am not sure about named functions.</li>
  <li>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.</li>
  <li>The hard part is making it relevant. Don't make all of the exercises about accounting.</li>
  <li>Provide spreadsheets that are started, and give them exercises to add/change something.</li>
  <li>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.</li>
  <li>If the data sets are too small, then it will not seem relevant, as you could do it my hand more easily.</li>
  <li>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.</li>
  <li>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.”.</li>
  <li>Most of what you do in spreadsheets can be done in python (except data entry), so you can link it to the python lessons.</li>
  </ul>
  
  <p>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.</p>
  
  <p>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).</p>
  
  <hr>
  
  <p>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).</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T18:51:02.083Z
Answers.Text: @ctrl-alt-delor  I started bith Blockly (Google) last year, and did a few weeks in Scratch, to try to demonstrate the basics.  Some said they found it useful, some did not.  I am keen to try anything new that helps learners to "get it" at the beginning, before moving on to coding in a text-editor or IDE.
Answers.UserDisplayName: srattigan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T10:31:49.797Z
Answers.LastActivityDate: 2017-08-30T19:05:01.847Z
Answers.LastEditDate: 2017-08-30T19:05:01.847Z
Answers.UserDisplayName: ctrl-alt-delor
Answers.Body: <p>The big disadvantage seems to be that you're re-enforcing their (or maybe your own) preconceptions about barriers to entry, and taking them further from the 'normal' programming environment. </p>
  
  <p>Yes, you can twist a spreadsheet to demonstrate some topics, but the biggest misconception you will teach by starting like this is 'everything executes in parallel'. Having moved from coding software to verilog (hardware) I can vouch for this being a major mindset change.</p>
  
  <p>You're also teaching a non-flat code layout, have zero scope for sensible comments, and an unusual syntax.</p>
  
  <p>A better approach is probably to find an online simulator (i.e. a web browser, which everyone has or can access in many countries). These will handle the code storage (in the browser or in the cloud) and avoids any assumptions about how familiar they are with specific types of software. I really think you're better identifying this as a new journey, and not expecting your cohort to have <em>anything</em> installed on their machines.</p>
  
  <p>Having supported a public drop-in class, I'd also opt for an environment which allows both 'block' coding or text based views like the <a href="https://makecode.microbit.org/" rel="nofollow noreferrer">micro:bit javascript blocks editor</a>. This removes the barrier of needing to remember syntax and seems just as relevant with older introductory level students as very young ones. Once you have introduced the fundamentals (keeping the first contact easy and low stress), you can move to using text based entry.</p>
  
  <p>Returning to the micro:bit example, I think having a physical device is less important with an older cohort (particularly if they are in your class by choice). It gives you scope to use a demo, and show some context about how close to invisible/trivial computers are (something else that your spreadsheet doesn't expose).</p>
  
  <p>To <strong>summarise my objections</strong> to the proposed approach:   </p>
  
  <ul>
  <li>Students in your specific cohort may have no (or negative) experience of spreadsheets [unless you already covered this in a prior <em>stand-alone</em> module]</li>
  <li>There is no visible execution flow to follow</li>
  <li>User input is parsed in parallel, not in sequence</li>
  <li>The abstraction (and syntax) of user input to a spreadsheet does not look like code (compare with the discussion of markup vs program languages)</li>
  <li>Only one cell of user input can be read at a time (and this makes commenting or review hard)</li>
  <li>Students are unlikely to find many other resources to use for independent study which are aligned with your proposed approach</li>
  </ul>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T14:06:14.693Z
Answers.Text: Do you mean 'you teach this as an introduction', or 'you learn from spreadsheets'? I think it will do a small amount of harm - maybe to a minority - if it is used as an introduction.
Answers.UserDisplayName: Sean Houlihane
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T14:07:40.277Z
Answers.Text: I like the above suggestion by Sean. And, most editors come with intellisense anyway, so almost nobody needs to remember syntax. I am not proud of it, but I absolutely remember none of the syntax, and I have quite a few enterprise projects under my belt.
Answers.UserDisplayName: Jay
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T14:10:51.657Z
Answers.Text: @Jay Day one, it's not a question of remembering syntax, it's all about mapping natural language to the unknown. The problem then with blocks is trying to remember the hierarchy and where the 'loop thing' is hidden. I strongly feel that with this group, day one needs to be easy and appear productive.
Answers.UserDisplayName: Sean Houlihane
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T14:13:18.797Z
Answers.Text: Ah, then, I stand corrected. Easy and Productive is my mantra. for myself and others
Answers.UserDisplayName: Jay
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T18:47:49.543Z
Answers.Text: @Sean   I've also tried both https://blockly-games.appspot.com/ and Scratch (cloud and DL vers), trinket.io for online storage and execution and pythontutor.com so that you can step through the code and see it visualised in the browser.  I am also teaching a module on Excel this year, and it occurred to me that perhaps I could use it as a learning aid for the concepts outlined above, before moving on to other approaches.  I'd be interested to know how it may do harm?  If discussing how the SUM function works "under the hood" it might be a way to introduce the idea of something like a for-loop.
Answers.UserDisplayName: srattigan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-31T09:06:57.027Z
Answers.Text: @srattigan Added to the answer. I worry that you will plant some seeds of false understanding, confusion or concern, unless you start with an above-average familiarity of using spreadsheets across the whole cohort. I was writing database applications when I first encountered spreadsheets, and the spreadsheets made little sense to me at the time (35 years ago - so my early experience may match some of your cohort's only exposure).
Answers.UserDisplayName: Sean Houlihane
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-31T15:56:55.327Z
Answers.Text: @Sean, thanks for clarifying what you meant.  I can see where you are coming from, and while I do not agree entirely with your perspective, it is food for thought.  I'm going to have to think about this a bit more...
Answers.UserDisplayName: srattigan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T10:27:57.227Z
Answers.LastActivityDate: 2017-08-31T09:09:22.050Z
Answers.LastEditDate: 2017-08-31T09:09:22.050Z
Answers.UserDisplayName: Sean Houlihane
Answers.Body: <p>I got a chance to teach <em>Introduction to Computing &amp; Programming</em> course to Chemical Engineering entry students and their syllabus included both Programming concepts &amp; Excel. I began the course with just Algorithms and after 4 weeks, switched to Excel &amp; then on programming. Off course they are different to your target audience a bit but I found Excel('s functions) pretty helpful for them to comprehend the syntax (after a couple of weeks of Excel, I switched to Visual C++), so the pros you mentioned are really there.</p>
  
  <p><strong>Cons</strong></p>
  
  <p>Using Excel alone can make students thinking in terms of sheets/tables which can make them picking the concepts of arrays,etc. pretty tough later on and even if you go in some depth of Excel functions, still I don't feel its worth an entire course (even to learn programming). </p>
  
  <p><strong>Conclusion/Suggestion</strong></p>
  
  <p>My personal experience of using Excel as catalyst was really good one and I think using an user-friendly/easier IDE like Visual Studio with Excel is worth a try</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T20:55:17.493Z
Answers.Text: Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64854/discussion-on-answer-by-talha-irfan-introduction-to-programming-class-use-sprea).
Answers.UserDisplayName: thesecretmaster
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T14:22:45.307Z
Answers.LastActivityDate: 2017-08-30T14:22:45.307Z
Answers.UserDisplayName: Failed Scientist
Answers.Body: <p>The choice of using spreadsheets to teach programming itself is kind of baffling for me. I would rather you use of the <a href="https://www.w3schools.com" rel="nofollow noreferrer">several</a> <a href="http://jsfiddle.net/" rel="nofollow noreferrer">online</a> <a href="http://www.tutorialspoint.com/compile_c_online.php" rel="nofollow noreferrer">ways</a> to <a href="http://csharppad.com/" rel="nofollow noreferrer">teach</a> coding, which are much more useful. </p>
  
  <p>If online is not an option and you want something simple, a straight forward combination of <a href="http://code.visualstudio.com/" rel="nofollow noreferrer">Visual Studio Code</a> and <a href="https://gcc.gnu.org/" rel="nofollow noreferrer">GCC Compiler</a> (which is probably already there on the machine) would be a good option. </p>
  
  <p>If these are first years, and I was a first year, I don't want to see Excel sheets. Spreadsheets make command line look like an attractive neighbour. </p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T14:12:06.857Z
Answers.Text: I have nothing against spreadsheets (I use them myself at work). Just, I don't want first years exposed to it, that is all :P I like to keep my classroom fun and nice, and spreadsheets are just not that.
Answers.UserDisplayName: Jay
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T14:20:23.923Z
Answers.Text: To use a simple analogy, spreadsheets are like that Microsoft guy from the apple ad. Just does not fit into my definition anything remotely fun. Full Disclosure, I am a huge MS fan, and 80 % of my money comes from dot net, but yeah, I can be honest and say that most of the time Microsoft is not what I call fun. They have improved over the years, but, spreadsheets...nope, not fun at all.
Answers.UserDisplayName: Jay
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T18:54:18.363Z
Answers.Text: Thanks, I wasn't even thinking of fun!  I used Scratch last year with mixed results.  I also used Blockly Games.  Maybe I can find a way to make Excel sheets fun :D  It's a good point though!  Fun = engagement => better learning?
Answers.UserDisplayName: srattigan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-30T14:06:11.337Z
Answers.LastActivityDate: 2017-08-30T14:06:11.337Z
Answers.UserDisplayName: Jay
Body: <blockquote>
    <p>Are there any "pros" or "cons" I have overlooked regarding using Excel
    as a means to introduce a range of fundamental programming concepts.</p>
  </blockquote>
  
  <p>This question relates to teaching a programming module at secondary school final year level (one level below first year of university).  I use Python.</p>
  
  <h2>Learner profile</h2>
  
  <p>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.</p>
  
  <h2>Rationale</h2>
  
  <p>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.</p>
  
  <h2>Syllabus</h2>
  
  <p>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.</p>
  
  <h2>Relevant topics to explore in the Introduction</h2>
  
  <p>I'll try to be succinct but can expand on any topics in the comments</p>
  
  <ul>
  <li>Variables: cell ref ~ address in memory- not user friendly. Name a cell- can be used in expression, like a variable.</li>
  <li>Operators and BEMDAS</li>
  <li>Syntax</li>
  <li>Boolean AND OR NOT</li>
  <li>conditional statements</li>
  <li>built-in functions</li>
  <li>create a User Defined Function (possibly- not sure on this one).</li>
  </ul>
  
  <h2>Pros and Cons</h2>
  
  <p>I've mentioned some of the pros, as I see them.  I cannot think of any cons at the moment: </p>
  
  <blockquote>
    <p>Are there more pros I've missed, are there possible downsides, and has
    anyone tried using this before?</p>
  </blockquote>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-08-30T14:19:33.640Z
Comments.Text: Which OS are you using. If you are using a Unix (UNIX, MacOS, Gnu/Linux), then (if syllabus allows) it could be a good idea to teach command line. My order of preference, for my own usage, are: Unix command line, Unix GUI (KDE), Microsoft GUI, Microsoft command line.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-08-30T17:11:30.873Z
Comments.Text: Actually, I don't see any "pros" stated in your question. Did you forget to list them. I see the "what" but not the "why".
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-08-30T18:38:02.200Z
Comments.Text: @Buffy; the pros are that the concepts under "Relevant topics to explore in the Introduction" are introduced, i.e. to visualise a variable as a cell location which can be given a name, and you can assign a data type, use the name in calculations etc.
Comments.UserDisplayName: srattigan
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-08-30T18:40:45.597Z
Comments.Text: @ctrl-alt-decor  All the machines use Win7.  I use a Linux laptop myself.  I have considered starting code after the intro with NotePad++, and this could generate Python code that is run from the command line, and I have also been thinking about creating scripts in the form of Windows batch files and doing some simple "commands" for file-sys nav, editing/creating/deleting folders and so on...
Comments.UserDisplayName: srattigan
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-08-30T18:47:13.140Z
Comments.Text: But say why you think those things are "pros" for this way of teaching. You aren't making a connection (for me, at least). You are just listing topics.
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-08-30T19:20:09.183Z
Comments.Text: @Buffy My rationale is that it introduces these topics in a more familiar, and relatively popular application that many may have met before, and to use the Excel environment to demonstrate the concepts of variables etc.  When I show the Python Interpreter, math expressions will (for the most part) evaluate as they do in Excel.  If I use if/else, the syntax will differ but the principle will be the same.  If we were to look at a function to sum a list, we have to think about the algorithm that may be used "under the hood" in Excel, and create it in Python.  Similarly for min, max etc.
Comments.UserDisplayName: srattigan
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-08-30T19:35:43.707Z
Comments.Text: See my answer here, which I just updated to address this issue. If they are well familiar with spreadsheets then it is more natural, of course.
Comments.UserDisplayName: Buffy
Tags: <lesson-ideas><secondary-education><teaching-analogy><introductory-lesson><adult-education>
Title: Introduction to programming class: use Spreadsheets to introduce fundamentals
ThreadText: # Introduction to programming class: use Spreadsheets to introduce fundamentals
  
  (Asked by: username_0 on 2017-08-29)
  
  > 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?
  
  **Tags:** lesson-ideas, secondary-education, teaching-analogy, introductory-lesson, adult-education
  
  > **Comments:**
  > **username_1**: Which OS are you using. If you are using a Unix (UNIX, MacOS, Gnu/Linux), then (if syllabus allows) it could be a good idea to teach command line. My order of preference, for my own usage, are: Unix command line, Unix GUI (KDE), Microsoft GUI, Microsoft command line.  
  > **username_2**: Actually, I don't see any "pros" stated in your question. Did you forget to list them. I see the "what" but not the "why".  
  > **username_0**: @username_2; the pros are that the concepts under "Relevant topics to explore in the Introduction" are introduced, i.e. to visualise a variable as a cell location which can be given a name, and you can assign a data type, use the name in calculations etc.  
  > **username_0**: @ctrl-alt-decor  All the machines use Win7.  I use a Linux laptop myself.  I have considered starting code after the intro with NotePad++, and this could generate Python code that is run from the command line, and I have also been thinking about creating scripts in the form of Windows batch files and doing some simple "commands" for file-sys nav, editing/creating/deleting folders and so on...  
  > **username_2**: But say why you think those things are "pros" for this way of teaching. You aren't making a connection (for me, at least). You are just listing topics.  
  > **username_0**: @username_2 My rationale is that it introduces these topics in a more familiar, and relatively popular application that many may have met before, and to use the Excel environment to demonstrate the concepts of variables etc.  When I show the Python Interpreter, math expressions will (for the most part) evaluate as they do in Excel.  If I use if/else, the syntax will differ but the principle will be the same.  If we were to look at a function to sum a list, we have to think about the algorithm that may be used "under the hood" in Excel, and create it in Python.  Similarly for min, max etc.  
  > **username_2**: See my answer here, which I just updated to address this issue. If they are well familiar with spreadsheets then it is more natural, of course.  
  
  ---
  
  ## 7 answers
  
  ### Answer by username_1 on 2017-08-30. Score: 7
  
  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).
  
  > **Comments:**
  > **username_0**: @username_1  I started bith Blockly (Google) last year, and did a few weeks in Scratch, to try to demonstrate the basics.  Some said they found it useful, some did not.  I am keen to try anything new that helps learners to "get it" at the beginning, before moving on to coding in a text-editor or IDE.  
  
  ---
  
  ### Answer by username_5 on 2017-08-30. Score: 7
  
  The big disadvantage seems to be that you're re-enforcing their (or maybe your own) preconceptions about barriers to entry, and taking them further from the 'normal' programming environment.
  
  Yes, you can twist a spreadsheet to demonstrate some topics, but the biggest misconception you will teach by starting like this is 'everything executes in parallel'. Having moved from coding software to verilog (hardware) I can vouch for this being a major mindset change.
  
  You're also teaching a non-flat code layout, have zero scope for sensible comments, and an unusual syntax.
  
  A better approach is probably to find an online simulator (i.e. a web browser, which everyone has or can access in many countries). These will handle the code storage (in the browser or in the cloud) and avoids any assumptions about how familiar they are with specific types of software. I really think you're better identifying this as a new journey, and not expecting your cohort to have *anything* installed on their machines.
  
  Having supported a public drop-in class, I'd also opt for an environment which allows both 'block' coding or text based views like the [micro:bit javascript blocks editor](https://makecode.microbit.org/). This removes the barrier of needing to remember syntax and seems just as relevant with older introductory level students as very young ones. Once you have introduced the fundamentals (keeping the first contact easy and low stress), you can move to using text based entry.
  
  Returning to the micro:bit example, I think having a physical device is less important with an older cohort (particularly if they are in your class by choice). It gives you scope to use a demo, and show some context about how close to invisible/trivial computers are (something else that your spreadsheet doesn't expose).
  
  To **summarise my objections** to the proposed approach:
  
  * Students in your specific cohort may have no (or negative) experience of spreadsheets [unless you already covered this in a prior *stand-alone* module]
  * There is no visible execution flow to follow
  * User input is parsed in parallel, not in sequence
  * The abstraction (and syntax) of user input to a spreadsheet does not look like code (compare with the discussion of markup vs program languages)
  * Only one cell of user input can be read at a time (and this makes commenting or review hard)
  * Students are unlikely to find many other resources to use for independent study which are aligned with your proposed approach
  
  > **Comments:**
  > **username_5**: Do you mean 'you teach this as an introduction', or 'you learn from spreadsheets'? I think it will do a small amount of harm - maybe to a minority - if it is used as an introduction.  
  > **username_6**: I like the above suggestion by username_5. And, most editors come with intellisense anyway, so almost nobody needs to remember syntax. I am not proud of it, but I absolutely remember none of the syntax, and I have quite a few enterprise projects under my belt.  
  > **username_5**: @username_6 Day one, it's not a question of remembering syntax, it's all about mapping natural language to the unknown. The problem then with blocks is trying to remember the hierarchy and where the 'loop thing' is hidden. I strongly feel that with this group, day one needs to be easy and appear productive.  
  > **username_6**: Ah, then, I stand corrected. Easy and Productive is my mantra. for myself and others  
  > **username_0**: @username_5   I've also tried both https://blockly-games.appspot.com/ and Scratch (cloud and DL vers), trinket.io for online storage and execution and pythontutor.com so that you can step through the code and see it visualised in the browser.  I am also teaching a module on Excel this year, and it occurred to me that perhaps I could use it as a learning aid for the concepts outlined above, before moving on to other approaches.  I'd be interested to know how it may do harm?  If discussing how the SUM function works "under the hood" it might be a way to introduce the idea of something like a for-loop.  
  > **username_5**: @username_0 Added to the answer. I worry that you will plant some seeds of false understanding, confusion or concern, unless you start with an above-average familiarity of using spreadsheets across the whole cohort. I was writing database applications when I first encountered spreadsheets, and the spreadsheets made little sense to me at the time (35 years ago - so my early experience may match some of your cohort's only exposure).  
  > **username_0**: @username_5, thanks for clarifying what you meant.  I can see where you are coming from, and while I do not agree entirely with your perspective, it is food for thought.  I'm going to have to think about this a bit more...  
  
  ---
  
  ### Answer by username_7 on 2017-08-30. Score: 4
  
  I got a chance to teach *Introduction to Computing & Programming* course to Chemical Engineering entry students and their syllabus included both Programming concepts & Excel. I began the course with just Algorithms and after 4 weeks, switched to Excel & then on programming. Off course they are different to your target audience a bit but I found Excel('s functions) pretty helpful for them to comprehend the syntax (after a couple of weeks of Excel, I switched to Visual C++), so the pros you mentioned are really there.
  
  **Cons**
  
  Using Excel alone can make students thinking in terms of sheets/tables which can make them picking the concepts of arrays,etc. pretty tough later on and even if you go in some depth of Excel functions, still I don't feel its worth an entire course (even to learn programming).
  
  **Conclusion/Suggestion**
  
  My personal experience of using Excel as catalyst was really good one and I think using an user-friendly/easier IDE like Visual Studio with Excel is worth a try
  
  > **Comments:**
  > **username_8**: Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64854/discussion-on-answer-by-talha-irfan-introduction-to-programming-class-use-sprea).  
  
  ---
  
  ### Answer by username_6 on 2017-08-30. Score: 3
  
  The choice of using spreadsheets to teach programming itself is kind of baffling for me. I would rather you use of the [several](https://www.w3schools.com) [online](http://jsfiddle.net/) [ways](http://www.tutorialspoint.com/compile_c_online.php) to [teach](http://csharppad.com/) coding, which are much more useful.
  
  If online is not an option and you want something simple, a straight forward combination of [Visual Studio Code](http://code.visualstudio.com/) and [GCC Compiler](https://gcc.gnu.org/) (which is probably already there on the machine) would be a good option.
  
  If these are first years, and I was a first year, I don't want to see Excel sheets. Spreadsheets make command line look like an attractive neighbour.
  
  > **Comments:**
  > **username_6**: I have nothing against spreadsheets (I use them myself at work). Just, I don't want first years exposed to it, that is all :P I like to keep my classroom fun and nice, and spreadsheets are just not that.  
  > **username_6**: To use a simple analogy, spreadsheets are like that Microsoft guy from the apple ad. Just does not fit into my definition anything remotely fun. Full Disclosure, I am a huge MS fan, and 80 % of my money comes from dot net, but yeah, I can be honest and say that most of the time Microsoft is not what I call fun. They have improved over the years, but, spreadsheets...nope, not fun at all.  
  > **username_0**: Thanks, I wasn't even thinking of fun!  I used Scratch last year with mixed results.  I also used Blockly Games.  Maybe I can find a way to make Excel sheets fun :D  It's a good point though!  Fun = engagement => better learning?  
  
  ---
  
  ### Answer by username_3 on 2017-08-30. Score: 1
  
  I agree with most of the other answers, but I wanted to add another way to look at it:
  
  I think one of the biggest downsides of using spreadsheets to introduce programming is that it reinforces a lot of stereotypes about programming, which turns off a lot of people who might otherwise have been interested in the subject. If the first day of my first programming course was "okay, now open up Excel..." my eyes would have glazed over and I would have thought "maybe this programming stuff isn't for me after all..."
  
  Programming is more than just ones and zeroes or staring at spreadsheets. There's a **craft** to it, if not an art, and it opens up a ton of possibilities for expressing yourself, communicating ideas, and accomplishing your goals. I think that's the stuff you should be highlighting in your first course.
  
  And since you're working with students from diverse backgrounds and of under-represented groups in computer science, I think you should be very aware of the effect your class has on their interest.
  
  At the risk of repeating an answer I've given before, I'd like to point you to [Processing](http://processing.org), which I think is perfect for the type of class you're teaching. See these other questions for more info:
  
  * [Order to Teach Topics in an Intro Programming Class](https://cseducators.stackexchange.com/questions/2793/order-to-teach-topics-in-an-intro-programming-class/2798#2798)
  * [Using Processing as an entry point in an Introductory Course](https://cseducators.stackexchange.com/questions/19/using-processing-as-an-entry-point-in-an-introductory-course/2920#2920)
  * [Programming languages specifically designed for beginners](https://cseducators.stackexchange.com/questions/161/programming-languages-specifically-designed-for-beginners/173#173)
  
  Shameless self-promotion: I've written a bunch of tutorials that start in Processing and then "graduate" to more advanced topics available at [HappyCoding.io](http://happycoding.io), and I think they're pretty amenable to a classroom environment.
  
  > **Comments:**
  > **username_0**: @username_3, really good point.  Who wants a boring Introduction?  As someone said in another response- we need some fun in there too!  I may demo some of the work of previous years students to show what the end-goal is.  I've read through those links as well- there were some really nice suggestions in each.  Processing looks pretty nice, and although I am happily married to Python, I am tempted to cheat, or even have an affair with Processing.  
  > **username_3**: @username_0 In that case you might look into using [Processing.py](http://py.processing.org/). See [this answer](https://cseducators.stackexchange.com/questions/3374/ide-vs-editor-and-terminal-for-cs1/3388#3388) for more info.  
  
  ---
  
  ### Answer by username_2 on 2017-08-30. Score: 1
  
  Perhaps you should first examine the goals you have for your students. Where do you want them to end up. You describe them as pretty unsophisticated in computing when they begin. The students you describe aren't completely unique, of course, but are not the typical high-school or college student.
  
  If all you want is to give them a little bit of a glimpse of programming in a more general course, then your approach seems fine to me, though I would probably do something different.
  
  If you feel that spreadsheets would be an especially useful thing for them to know more deeply, then certainly what you are doing is fine.
  
  However, if you want them to be able to use some general purpose programming language eventually, then it seems to me like you are taking a detour that isn't getting them close enough to the goal to warrant the time and effort.
  
  User username_1 [suggested](https://cseducators.stackexchange.com/a/3419/1293) simple programming environments like *snap* and *Scratch* which offer a more standardized introduction to programming and that aim more directly toward that goal, if it is, indeed, your goal.
  
  But start with the goal and work from there. Don't take too many side trips or trips that later need to be worked back from.
  
  ---
  
  Sorry, I should have said initially, that if the students already have some fairly deep understanding of spreadsheets, what they do, and how, then this is a much more natural kind of thing to do. However, if they are also naive about spreadsheets, then this might create problems instead of help overcome them. But you need to asses your own students, of course.
  
  > **Comments:**
  > **username_0**: I like to try different things every year.  Some work and some don't.  This would not be a major part of the course, just an introduction before moving on to writing Python code in NotePad++ (and later- in the follow-on module- PyCharm).  For this module they must understand the elements in the intro, and be able to create flowcharts, modular programming (files and functions, imports etc.).  Some may be familiar with Office, and some likely will not.  
  > **username_2**: Good, then. A wise friend of mine has advocated for a long time that a certain part of every course (I think he says 10%) should be experimental. Try something new and evaluate it. But also be prepared to compensate if it goes especially badly. It also makes it less boring if you have to teach the same courses repeatedly.  
  > **username_0**: I never know what the students are going to be like until they start, so I'll know next Monday.  It looks like there can be benefits to using Excel: if they have some knowledge of using it, vars, expression and functions may be grasped more readily.  On the other hand, it's not very exciting.  Scratch and Google Blockly are arguably more "fun", but it was considered useful by about half of last years cohort.  Another "new" thing to try is batch file scripts... there really are so many options I can use that getting the right balance is difficult.  
  
  ---
  
  ### Answer by username_4 on 2018-01-24. Score: 1
  
  I think it is an excellent idea. I have taught both programming and introductions to Excel.
  
  A few quick ideas:
  
  You can teach "debugging" by having sum formulas refer to the wrong range, especially by walking them through editing a sheet so they are led into the trap of the sum not being updated.
  
  Excel is an excellent tool for string manipulation - you can write formulas to take strings from a couple of columns and concatenate them, adding fixed separator characters.
  
  You can add conditional logic to string manipulation, varying the way you concatenate depending on another column, say a salutation.
  
  Computer Graphics can be taught, maybe by customising some samples, because you have access to the [Shapes API within VBA.](https://msdn.microsoft.com/en-us/vba/excel-vba/articles/working-with-shapes-drawing-objects?f=255&MSPPError=-2147217396)
  
  
  ---
  
  