@aparrish Maybe what you might teach for this step is more about methods to cut a "problem" in small chunks and how to draw flow charts and system design?
Like, less on code, but more around the actual thinking that bring one from "I want to do this" to "I'll do it that way".
Focusing the thinking more on "how to explain my problem to the computer" and less on "write code"
I'm not sure there's a way to teach that. If there is I never found it nor saw it used.
@aparrish @StreetWanderer you're speaking of the distinction between computer programming and software architecture
The traditional way to teach that involves design patterns, which last I checked, have a bad reputation among people who have to work with green CS grads.
@aparrish I've been fighting with a lot of "engineers" over the years about the way programming is taught to beginners.
I even wrote a bad Medium article on the subject.
Programming is taught as maths when it needs to be taught like a foreign language.
Learn to speak and formulate though in the "computer language", the specifics of syntax, vocabulary and grammar can be learned as you go.
Like with a language, your accent and grammar will be off at first but that's part of the learning.
@aparrish when I ta'd initial courses, that was the hard jump. tbh my advice to early cause students is "time and loc". experience the craft as you fumble towards comfort.
love to hear of better methods
@aparrish We had a whole class in my electrical engineering undergrad that tried to teach that, but mostly failed at it. I think project-based work, where you give people progressively larger and larger problems to solve, is pretty much the way to do it.
The principle from the class I alluded to still applies: abstraction and synthesis. Students must abstract a problem and then synthesize that into the relevant language concepts
@aparrish One thing that I'd be interested to try is a daily whiteboarding excercise. So students only do the abstraction part and you do it as a group for like the first ten minutes of class every single day.
If you look at it at two skills it's the abstraction that's usually the harder part than the synthesis, so I think just working those abstraction muscles through daily calisthenics is the way to go.
@aparrish the only textbook I know that tries to address the second stage is 'How to Design Programs'. It's Scheme based, however:
Traditionalist: http://greenteapress.com/wp/think-python-2e/
Iconoclastic: https://mitpress.mit.edu/exploratory (hi @nickmofo )
@aparrish How experimental are you willing to go?
I have some theoretical justifications for teaching beginners to solve simple problems in a variety of esolangs. 😉
@aparrish
My thesis is basically: most of *deep* programming knowledge is getting the flexibility to paradigm shift, & the easiest way to get that is exposure to lots of paradigms. Most of the difficulty in learning real languages is memorizing inessential syntax details.
Esolangs are all paradigm and no syntax, so they can be learned more quickly because they make no consessions to reality.
Solving the same problem in brainfuck, befunge, pure prolog, and forth will level you up.
@LogicalDash @aparrish
I'm not familiar with that at all, & will have to look into it.
It's the logic behind language survey courses and the "seven languages in seven weeks" books. I think those examples compromise too much, choosing marginally useful languages even when utility for real problems is counterproductive.
@aparrish Another nice experimental technique: teach them about stacks and associative arrays, then have them try to implement a toy forth-like stack language. Then, ask them to write something in it.
Parsing in a toy forthlike is easy (just split by whitespace), & keeping track of parameters and functions is also easy (two stacks). So, it's within the realm of possibility for beginners to implement.
@aparrish Maybe implementing something more like turtle would be more thematic. There's more complexity in some ways & less in others.
(On the forth side, I'm sure there's a subset of postscript that isn't super ugly. Also if you teach a little postscript people can go home and write code directly into their printer, which is a nice trick.)
@aparrish
Famous in my world:
Software carpentry, https://software-carpentry.org/.
Also, the Computing Education blog is good, https://computinged.wordpress.com/.
Greg Wilson (Software Carpentry founder) is on Twitter: https://twitter.com/gvwilson
Also Lorena Barba from GWU: https://twitter.com/LorenaABarba
This is mostly scientific/engineering, of course.