What to teach, in various scenarios?

I suppose, that if one has a full semester of 3/hours per week, one could teach a relatively complete "programming 101" class focused around Arduino-class boards...

What about other scenarios?

  1. One-day (6h?) session.
  2. One hour "intro" (is that completely too short to do anything useful? What do you think would be the minimum time?)
  3. One hour/day, several weekends in a row.

(I'm thinking things like library or community center classes.)

PRG101 is history of computing machines, architecture, non-base10 math (binary, octal, hex), ASCII. Hands-on comes later. Lecture:Lab should be low (1:4). You will get fast and slow students. Keep the fast interested, and the slow up to date. Make it worth their time.

Once the basics are covered, state machine programming with millis() for non-blocking code would be next.

4 Likes

Are you asking which lessons to learn?
You can jump in directly to program, to use HW, to write code for it.
I would not really recommend:

  • instead, I would take lessons about: "how to analyze a problem/task, how to break it down into building blocks, and how to synthesize the solution"

Learning a programming language "is easy" (mainly it ends up just by looking for the right functions to use). But designing a system is independent of a coding language. And it needs skills to break it down into smaller pieces (building blocks).

Try to learn "system engineering" (instead of a particular programming language). Try to learn how a SW system works, maybe in correlation with a particular HW. But do not focus too much on a specific HW (board): take it more generic (e.g. embedded MCU vs. PC - they are different but not so different in terms of programming it when you know what a computer HW does).

6h per day is a lot, but reasonable. It sounds more like a full-time study.

When it comes to "learn coding" - keep it generic: it can be also Python, on a PC. Try to solve "problems", e.g. how to sort a list, how to do "Monte Carlo", what is the difference between fix point and floating point, what is a multi-tasking system ...
All helps you also to program embedded platforms, MCUs.

Do not care about the hours, care more about the assigned work items: if your tutor gives you a challenge - try to solve it. The speed comes later (in less than 1 hr to solve).
But be ware of: there are "system design" tasks out there, even programming (and testing ! - never forget how to verify yourself you did it right: 50% or more time is needed just for testing), which can take days to accomplish.

In drastic words: the success to achieve a goal depends on the "way of thinking".
Therefore: "learn to think"
(to analyze, to refine, optimize, implement, and to synthesize - if you learn just to "implement" - you miss all the much more important steps)

1 Like

Force students to watch this series:

"hmmm" - do not learn to program as the first step.
Learn how to solve a problem: a programming language is the tool to implement the solution, but not to find the solution.
And a different programming language might "implement" !!! your "solution" !!! in a much better way. Not difficult to change to another language, to learn a new coding langugage.
Most difficult is to "understand the problem" and "to find a solution", and to break it down before you build up.
My message was this: "learn to think and solve problems" (not a coding language first).

3 Likes

Teach them how to use chatGPT :wink:

Joke aside Definitely too short for anything deeply useful. If time is limited then Focusing on algorithmics and putting that to practice with Graphical programming (for hands on) can raise interest.

There is a good reason why practical education works with blocks of 45 - 50 minutes with breaks.
image

So for a very general introduction 1 hour is about right. You wont expect full retention.

Are you intending "practical" sessions or "lectures" supported by home study?

Yeaaah, "teach them to use ChatGPT", or even "how to use Google". Funny, joking.
If you do not know what to look for and to understand the answer, or on ChatGPT to verify if the answer is "reasonable" - you are still lost.
If you do not know anything - you cannot search for anything. So, basics are still needed.
But learning a programming language are not basics, these are tools: if you do not know what a nail or screw is, you cannot use a hammer vs. screw driver.
Just joking... (I am a big fan of having fundamental knowledge, searching for tools and ways to approach a solution is OK. One of my co-workers has mentioned once: "when you cannot do object oriented programming (and design) on a piece of paper - a tool will not help you. I agree: you spend more time to understand how to use a tool. But when you do not know what the tool does (and should do) ...
So, don't learn tools, languages etc. Learn principles, tool and language independent "programming patterns", system design ...

Our local libraries have been implementing "Maker spaces", and I'm considering volunteering to do some sort of "Arduino class." But my "specialty" is essentially deep internals, so I'm not sure what I should say.

Maybe a "What is Arduino?" sort of thing, with some sort of follow-up meet-ups?

The only thing Ive done that was similar was an "Arduino Alternatives" - about 30 minutes talking about the many alternatives, but that was part of an all-day thing that included "install and get temp/humidity thing working lab", which was funded and included parts, protoboard, lunch, and at least one other (more interesting and better looking) speaker.

(Still available (but getting outdated!) Arduino-alternatives.pptx )

Brady at Dallas Makerspace has taught Arduino classes for a few years. He's super friendly and rumor has it that he teaches a good class. I suspect he can and will provide high quality opinions on teaching a makerspace kind of Arduino class.

Arduino is of course a very broad topic and, as part of the embedded systems world, includes everything from hardware, software, electronics with a huge amount of already existing learning resources, much of which is self study in various formats, tutorials, videos etc. You'd have to focus on something specific.

A lot depends on your target audience, how much material can be made available and how much time it could take.

If your starting point is having community center type premises available and you want to teach something related to Arduino, then probably something with a high practical content would be suitable say, as an example, building a simple clock on a breadboard with an Arduino and a display module. Break it down into modules and give the students small parts to try but then give them the reference solution so they can progress on to the next module.
Lesson 1 would be the IDE and the blink sketch. Lesson 12 could be testing the working clock. It should be so structured that even if students missed a few lessons or sat completely passively through it all, they would have a working project based on the reference solution. Have some optional extras for the brighter participants.

I have half considered something like this myself so please keep the thread up to date with your experience.

We got pre-algebra before algebra just to learn terms and concepts. Once a student has literacy they can advance their own studies. How often here does the root problem in a project here is either due to missing or false concepts?

So I sez first, Literacy!

1 Like

First, motivation.
Arduino has attracted many people who have done really neat things, with the "promise" that "neat things can be accomplished without needing a 4-year degree in computer science or EE."

So I guess I'm solidifying ideas:

  1. What is Arduino?
  2. Why would I want to try to do anything with Arduino?
  3. How much do I need to know to do things with Arduino?
  4. What else do I need, other than the Arduino itself?
  5. Where do I get stuff like that? How much does it cost?
  6. Now that I've got the stuff, what do I do next?
  7. How do I get from those first steps, to accomplishing the thing I wanted to do?
  1. These are some examples of what you can do with an Arduino.
  2. What is Arduino?
  3. Why would I want to try to do anything with Arduino?

. . .

1 - a system of hardware, software, help and market supporting hobby microelectronics. The main Arduino site says as much.

2 - to learn "anything" is an awfully wide range of difficulty. But given the number of solved projects just in the Arduino Playground to pick from, assembling kits could be a nice way in.

3 - the word "things" here... from blink led13 to build a flying robot with lazer eyes.

4 - a PC with internet and whatever you want to connect to the board.

5 - links to the Arduino shop, Lady Ada, Sparkfun, the old what I bought thread....

6 - intro to the forum

7 - How to Use the Forum

I guess it depends on what you can make fun into doing. Think like Tom Sawyer with a fence to paint.

1 Like

How to debug a sketch.

I'm getting "A Clockwork Orange" flashbacks.

2 Likes

I heard Barjne present the keynote address to the Software Development conference in 1987. The title of his talk was "C with Classes". He did not refer to the language as C++ in the late 1970's. That came much later.

I used to teach C at a Big Ten university, but also taught an onsite C programming course in 5 days. I think that's long enough to teach the language, but the key is to keep the student's interest. Also, there's a huge difference in teaching an audience where your employer is paying for it (and expects a return from the training).
For the short course, the key is keeping the student involved. You must take time for the student to solve simple programming problems. Example: after presenting the for loop material, have them do a "Price is Right" binary search program. This is a good one to use because they rarely get it right on the first try. Constrain the price to $0 to $100 and then have them test their code with values 0 and 100. Bugs often hide in the boundary areas of the problem. The examples should keep them engaged and teaching them debugging techniques at the same time.