# I need a training progression for academia and programming

As some of you might know, I am currently a fellow, aka at my personal writing retreat at Wolfenbüttel. And I decided to combine this with some sort of a training camp for my bouldering progress because you do need to have some breaks from writing during the day anyway and I can’t always watch Bones or create CV templates. You might have been following some of my bouldering on epigrammetry, the blog, or epigrammetry, the Twitter.

## Training progressions in sports

Also very few of you might know as well, I used to train a lot for long-distance running (10k) during my teens. So I know what training progressions are. I used to have detailled training plans, eating regimes, supplements to take and all that jazz. I stopped at some point because my immune system kept bullshitting me and as an ambitious person, I couldn’t take the idea of having to start from scratch after a half-year of being very sick and weak. I’d had it with having to arrange my whole life around my training. Yet the principles I’d learned over the course of the years, plus the high level of discipline required in those persuits, have helped me a lot during my early university studies.

## Systematic progress needs training goals

Looking back now, I used to approach studying and my ‘university progress’ just like I would have had planned my training progression. And it worked. I was really productive, things were going well. For me, at the time, this consisted mostly of getting all the translation homework done, reading a lot of Latin and Greek (at least an hour every early morning before starting my day) and getting through all the classics. Because I was fucking motivated.

This might have been due to there being actual goals to be achieved daily which I could measure my progress on. Like the speed, and thus number of pages, I would get through during my early morning reading practice. Back then, by the way, I also used to combine physical exercise with mental workouts like I have taken up again for this summer’s ‘training camp’. It works quite well. I should probably continue with it back home.

## How do you create a training progression for programming?

My problem is now: Over the years, I seem to have gotten out of the habit of approaching progress systematically. Or, well not exactly, but – let’s say – I follow academic learning goals with a lot less zeal ever since I got my degree. Which probably is the case for mostly everyone else. Because it’s quite a bit harder to find time and motivation for non-goal oriented learning after a hard day at work than when you had all the time in the world to study. I really envy my youger self for having all this time for learning. I love learning. But life-long learning isn’t exactly the same and doesn’t end after your degree, espeically not if you’re an early career scholar. Now I have a vague idea of some skills I want to improve in. But I am very good with training progressions and thus I know that the common advice ‘just program a lot’ or ‘do a private programming project’ just really is crap advice. Of course, it’s true. You just need a lot of practice. But there still are ways of approaching this effectively or ineffectively.

There are some good books out there which actually provide some learning progression. There is John Sonmez’s Software Dev Career Guide which is the single only thing close to a book providing a progression to systematically get better at programming. And, who would have thought, he is an athlete too. I always thought I was the only one who wanted a systematic training plan. But apparently, he felt that need, too. And for good reason. I have already complained many times about why people don’t approach learning like training and still expect to get reliable, constant results. With learning, this systematic training approach is called ‘curriculum’. In the post linked above, I mentioned that I thought online programming platforms were the answer.

## Which tools or medium can actually provide curriculum?

At the moment, I am at the point where I have let those online trainings slip again, a long while ago already. As it has happened to me multiple times over the years. If I can deduce from experience, I am likely or restart eventually and go crazy at online programming workouts for a while, then drop it completely again. But what you really need is consistency and daily workout. Plus, I can’t just do the apps. I always have a lot of books to read as well, which is quite important to me so they can’t be neglected either. But then I often end up only spending half of the time I would want to spend, read the book or, if you want to call it that, finish my ‘reading time’ and get tired after that. Also, I should already be at work, so I skip the programing workout.

While something surely is better than nothing, I should probably focus more on the practial work if I want to make faster progress. But in programming, that’s different from bouldering. In bouldering, it’s easy to see which routes I am capable of doing or whether I nailed a particular route. Or count how many pushups and pullups I can do (not enough, I have to admit). So I can measure progress easily. But with programming, this just isn’t the case. And in addition to that, for bouldering, there are tons of youtube gurus with mulitple videos each on how to get over plateaus and make progress, what you can work on, etc.

## Willpower alone isn’t enough

For programming, most of the advice isn’t too good in my opinion because it’s often too generic (“get a project”). Bouldering tips are concrete like “Perfect your flagging technique”. It’s easy to look up how you do that. It’s easy to notice when you’ve got it, physical feedback makes sure of that. So I decided I’ll have to look at my programming workouts the way I approach my pushups for now (they need to get done no matter what and no whining around). But it’s not really a solution to the problem to rely on willpower alone. Willpower alone will ultimately fail once you get stressed or anything comes up. And when that happens, I have a really hard time getting back into the routine. Which I hate. And then I hate myself for not managing to and then the vicious circle goes on. It’s really annoying.

## We need curriculum for systematic and swift progress

Of course, even with a good curriculum or a training plan, there will still be plateaus. You will still get stuck. But a good curriculum can help you over that last edge of the boulder. It can help you re-gather yourself after a failure or after you’ve let it all slack for a few weeks.

So this subject also makes me think with regard to this blog, it’s all the more important that curriculum gets developped for learning advanced LaTeX, so a willing user can make rapid progress. Rapid progress is good. It keeps you motivated. Plateaus are really dangerous because the can make you lose motivation and give on up the goal alltogether. So let’s find ways of measuring progress and collecting tips of what you can do to actively and systematically improve if you’re willing to.

Step one probably is to get the people to shut up who sneer at systematic approaches like this one. “Learning to program just doesn’t work this way”, they repeat time and time again. Yet I think this is not true. Getting better at programming is like learning any other skill. There is a systematic approach to it and when we have a systematic progression and training goals, we can figure out the steps we need to take.

That was it for now,

best,

the Ninja

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

# Cheat Sheets and Study Summaries

This is a quite long post about cheatsheets and also about effective studying. When you need a cheatsheet, chances are you’re trying to learn something (or use something or not yet very familiar with). Because if you already were and experiened expert, you wouldn’t need a cheatsheet, right?

First, I only wanted to share this cheatsheet template I made and explain why I did what I did. I ended up explaining the concept of the “survival summary” for effective studying and exam preparation, rant about what I think people do wrong when making cheatsheets and why I think the theory of effective learning should ultimately reflect in your cheatsheets. By the way, I hardly ever stick to my own rules when making cheatsheets… 😉

If you only care about the cheatsheet, please just scroll down and go get the template or skip to the section on the ‘design principles’ for my template 😉 . Everything else is a (prolonged) explanation of what I did and why I did it on a more theoretical level but I think (hope?) it might be a beneficial read 😉

## Cheatsheet philosophy

### Space

If you google how to create a cheatsheet, people will recommend you redefine all the section headings etc. as to remove as much unnecessary space as possible. But space is what gives you overview, it’s what guides your eves. If you remove it, you will lose a tremendous amout of time looking for information and not finding it straightaway. It would make more sense to actually reflect what you’re doing and try to save space by reducing unnecessary contents.

### Content

But apart from squeezing too much info on cheatsheets per page, another problem is the content itself. I checked out some cheatsheets to research this post and obviously with LaTeX-based cheatsheet templates, many take LaTeX itself as the subject. With what I found, the results often contain pretty superfluous information. That is to say that, for example, in many cases, almost the whole first page is made up of information with a way too short half-life. The starting out info will become obsolete once you’ve used LaTeX 3 times. Do you really want to add that to your cheatsheet? Maybe you could leave it out or create another resource (a getting started manual) or just reduce it to a bare minimum with a small font size.

### Cramming in more

If you have to, downsize the font size but don’t get rid of the spacing. Of course that’s going to save you time and allow you to cram in as much information as possible. But is that really the most effective thing to do? Don’t you want the cheatsheet in the first place to reduce the complexity of the topic? If you’re going to just copy it in from any source, you might as well not make a summary but always use the internet so you can find the information you need quickly. Thus, wouldn’t getting rid of all the structuring elements amount to the opposite result of what you intially wanted?

A good cheatsheet (or study summary, which is probably more accurate), in my opinion, will contain shockingly little information but all the information included will be highly relevant. Also, instead of listing all the possible commands, why not mention or introduce them, while explaining something actionable? You could group your cheatsheet not into types of commands but into topics or problems one might want solved. An actionable and task-oriented cheatsheet is more effective than a reference style one.

## The “survival summary”

When I write about cheatsheets, I can’t help but mix it up with the concept of the “survival summary” somehow. I got to know the concept in Krengel 2012 (see references) where he writes about how to study best. I am aware they’re not the same but thought you might be interested to learn about them anyway. In his book, after demonstrating effecitve note-taking (very visual and structured), Krengel explains his concept of the “survival summary” where you condensate all the material to be learned in one single page, in a late stage of studying for an exam when you already have the overview (also this method forces you to get yourself an overview…).

The idea behind this is that you can’t remember one hundred pages. But you can sure as hell remember one. So make sure everything which is absolutely necessary (what you need “to survive”) is on this page and act like your survival depended on it. Only add key concepts, not detail facts. Except maybe one or two indispensable, central ones which help to make it more visual. Using examples is always good as it induces some kind of “storytelling” which is good for memory.

Of course, if your exam consists in knowing detail facts by heart, this is just a good guideline for your memory. This summary is not meant to replace everything else. It just serves as the “memory hook” where you can localize your detailed knowledge. But I will exclusively reveal here that I have passed many exams by just knowing this most important info and having prepared a really good “survival summary” (without studying anything else before). You can definitely get by like this because the survival summary is basically the definition of a “pass grade”, embodied in an object in the form of a piece of paper. It contains all the info you need to succeed. Of course, you’ll really need to know its contents well, but if the summary is visual enough, it will be quite easy to remember. Hardly anyone will have problems remembering just one page if they really try.

## Note taking and ‘reducing’ information to the most imporant bits

Reducing is probably not the right word. It’s more like condensing lots of bla into the info behind it. Once you start doing this that the bla-to-info ratio is quite scary. In most kinds of schooling, there is tons of bla and, usually, very little info. So reduce complexity, introduce clarity and overview. Be visual. Focus on the bigger picture. Unnecessary detail will only cloud your mind. Don’t try to remember everything. It’s a recipe for disaster and, if anything, will ensure you remember nothing at all.

This overview, this summary is your security. Think of it as insurance. If done well, it will ensure you pass the exam. If you aim higher, it will be a sound base to ground your details on and give you a sense of security which will make you more confident. You can remember one single page, right? This page contains everything you need to pass, so what could really go wrong?

I personally started even taking my lecture notes like “survival summaries” rightaway, to save even more time. You end up with 10-12 survival summaries which you can reduce into the final study summary just before the exam. This will save you lots of time. So rather than just mindlessly noting down everything the professor says, only note down important stuff or information which is likely difficult to find outside of the lecture notes. If the information is on Wikipedia, only write down the keyword. Or make a glossary rightaway where you put all the ‘difficult words’ and their definitions.

These words alone often can go as a survival summary. If you know what they all mean and the concepts they’re related to, you already have the gist of what’s going on. When in class, always make three columns on your paper.

1. Left column: Leave empty to fill in the summary / keyword / heading of the current topic.
2. Middle column: Your actual notes.
3. Right column:  Anything you need to remember, be it historical dates in history, vocabulary in a language class or a glossary of difficult words.

In the middle column, highlight the important words as you write, so you don’t have to re-read everything to remember what paragraphs were about. You need this info to fill in the topic heading in the left column. The left and right columns are the prep work for your study summary. When preparing for the final summary, cut out everything repeating itself or not strictly necessary. Sum it all up in one final survival summary.

## Reduction and reflection >  mindless note-taking

Dare to only note the most important stuff. Most people want to note down everything because it makes them feel safe. Leaving things out, they fear to end up not understanding their notes anymore. This is not an issue if you take good notes and give thought to how you write things down. Often you don’t need to write a whole sentence to unambiguously understand the content. Or, if you have the keyword and the context, it takes 5 seconds to look it up on the internet should you really not remember what it meant. It is way more time-consuming to have to work through extensive notes. That’s why lots of people fail exams despite lots of work taking excessive notes. Every single word you note down you will have to work through again. Do yourself a favour and note down only what’s actually important.

Not noting down everything is beneficial for many reasons:

1. It’s the first stage of reduction of the material, if done right.
2. Taking good notes makes creating summaries so much faster.
3. Having condensed visual notes from the last lessons allows you to have the overview and keep you from noting down things multiple times.
4. If you never take more than one page of notes per lesson, reviewing the content before the next lesson will be really easy. You can learn things straightaway rather than waiting until the exam. Learn things as they come up! This advice from Steve Pavlina is probably the best studying advice ever.
5. Not writing complete sentences, using visual boxes with no more than 3-5 concepts per block, you actively make the information easy to grasp for your brain. Also, you find things more quickly.

### 8. Learn material the very first time it’s presented.

One of the biggest time wasters in school is having to relearn something you didn’t learn properly the first time. When students say they’re studying, most of the time they’re making up for a previous failure to learn the material.

In software development it’s well known that bugs should be fixed as soon as possible after they’re introduced. Waiting to fix a bug near the end of a project can take 50x as much effort as it would take to fix the bug the first time it was noticed. Failing to learn what you’re supposedly taught each day is a serious bug. Don’t try to pile new material on top of an unstable foundation, since it will take even more time to rebuild it later.

If you don’t understand something you were taught in class today, treat it as a bug that must be fixed ASAP. Do not put it off. Do not pile new material on top of it. If you don’t understand a word, a concept, or a lesson, then drop everything and do whatever it takes to learn it before you continue on. Ask questions in class, get a fellow student to explain it to you, read and re-read the textbook, and/or visit the professor during office hours, but learn it no matter what.

10 Tips for College Students, Steve Pavlina

Once you’re not new anymore at university and know your way around, you will quickly know where the lecturer has gotten his or her information on. (Hint: it’s probably somewhere in the literature list you never cared to notice). This is why my survival summaries and notes only contain insights or information so condensed you wouldn’t find them anywhere else. If your summary is supposed to be a go-to resource alongside the omniscience of Google, it has to be really good and give you access to information Google (or the library) couldn’t give you.

If it can be looked up quickly, is a detail and not extremly central to the point, don’t bother writing it down. You won’t be able to read your own handwriting in a few weeks anyway. If you type your notes on a computer and have decent typing skills, chances are you’ll procude so much text you’ll never be able to go through when studying.

I used to be quite religious about lecture notes and summaries. I wanted to make perfect notes, grasp all the information, constantly improve my note-taking skills until I realized the true art of good summaries lies in leaving things out.

Good notes glow with simplicity. If you’re notes are digital (written in LaTeX like my cheatsheets of course), use \href{http://link.com}{Name} to hide reference links in the texts. This will stop ugly links from ruining the overview but calm your fear of “forgetting or leaving out important information”.

Of course, since you’re not the one teaching the class, you can never quite know exactly what is most important, or completely unimportanty respectively, to the teacher. This is why, perfectly simplicistic survival summaries will remain a theoretical ideal you can never fully achieve. But that’s not a reason not to try. Don’t think this is the lazy way out either. It is actually quite hard, challenging work and requires a very good overview about the subject in question. I have created many bad survival summaries because I didn’t bother take enough time to understand the material at hand. These bad summaries will not get you very far.

Ideally there should be no need to study outside of class, at least in the sense of relearning material you didn’t learn the first time. You can review old material to refresh your memory, but you shouldn’t have to devote a minute of your time to learning something that was taught a month or two earlier.

[…]

During each semester ask yourself this question: Am I ready to be tested right now on everything that has been taught up to this point? If your answer is ever “no,” then you know you’re falling behind, and you need to catch up immediately. Ideally you should be able to answer “yes” to this question at least once a week for every subject.

[…] Put in the effort to learn your material well enough to get As in all your classes. It will pay off. Much of the material you learn will build on earlier material. If you get As in your freshman courses, you’ll be well prepared to pile on new material in your sophomore year. But if you get Cs that first year, you’re already going into your second year with an unstable foundation, making it that much harder to bring your grades up and really master the material. Make straight As your goal every semester. In the long run, it’s much easier. I found that C students tended to work a lot harder than I did, especially in their junior and senior years, because they were always playing catch up. Despite my packed schedule, it wasn’t stressful for me because I kept on top of every subject. Consequently, I had plenty of time for fun while other students experienced lots of stress because they constantly felt unprepared.

Steve Pavlina, Do it now

## How to know if a summary is good?

How do you know the summary is good? Well, you’ll never be able to guarantee. But usually, you’ll have a good feeling about it. If it doesn’t contain all the topics, for example, that’s a good indicator of a bad one. Or, when you went into a lot of detail in subject one and left out subject two because you spent all your energy on subject one, this is a classical example of the “unbalanced survival summary”. This happens, but shouldn’t. Thankfully, seeing as these summaries are quite visual, it will be quite apparent to you.

A summary or part of summary with tons of detail also mostly is an indicator you should deepen your knowledge about the subject first. A lot of detail usually means you lack the general understanding of the bigger picture and are very unfamiliar with the topic. See my comments about how an advanced person’s cheatsheet is not the same thing as beginner’s intro. This is exactly what I’m talking about here. A beginner will add detail which is necessary only for the very limited amount of time you’re a beginner. It might even be very relevant then. But it will turn to completely irrelevant once you’ve moved on to advanced user. An advanced user will add very little detail unless there is a good reason for it. The result will visibly be more balanced, topic-oriented, containin key concepts and an overview of the bigger picture.

You will learn a lot trying to condense information into a survival summary like this. In fact, this had turned out to be the most effective study strategy for me as you’re not complelely passive in this kind of revision.

So make sure to:

• use the methods of chunking (2-4 chunks) or storytelling (I mostly use chunking only though)
• Garbage In, Garbage Out –> if you don’t do some serious “editing” with your learning materials, this is what you’ll get…
• Condensate: “zoom out”
• Reduce: get rid of anything redundant or trivial
• get visual
• Facts versus skills: Operationalize

## What is a cheat sheet? Theory and practice

### What it should be

A memory aid which stores information you might need quick access to and need fairly frequently but not frequently enough so you would recall it without the cheatsheet.

#### What it shouldn’t be A crib

The thing you used in school to cheat (ok, yes I did too. I fact, quite masterfully so^^). I used to have these really full cribs which contained EVERYTHING and I printed them out, using the 16 pages or 32 pages on one page mode. Used to work pretty well.

#### A beginner’s guide

Beginner’s guides are totally legitimate but please, if you want both a cheatsheet and a beginner’s guide, make sure to create two different documents.

The problem is: A beginner’s guide includes tons of information you totally do need when starting out. But once you’ve successfully gotten started, most of this information is 100% obsolete. You’ll either never need it again (because it was one time information, like how to install something) or you will have it memorized by heart because you use it too frequently. The information contained in the beginner’s guide can intersect with the one still relevant later on, but in part, certainly will be obsolete once you’re not a beginner anymore. And, believe it or not, once you actually get started, you will reach advanced status fairly quickly. So make sure to keep those documents seperate. Just take the time to make one sheet with basic info and another one with info which might still pass as “basic” but will remain at least somewhat relevant to an advanced user.

#### A lexicon or a reference

I see this with LaTeX cheatsheets a lot. People cram in all the information there is. Including a minimal working example of a LaTeX document. Please, people, you will need this information exactly once. If you’re using an editor which provides some setup support (like Overleaf or even TeXmaker etc.) you will never use this information again. Unless you’re one of those hardcore people who don’t use IDEs. And even then, you probaly won’t need it more than three times until you have memorized it.

#### The command graveyard

Or, instead of the minimal working example, they add in all the symbols you can possibly use in LaTeX. Even if you use LaTeX for math purposes, there is no way you’ll ever need all those symbols. Some you will need fairly frequently, some you won’t need at all. And, if you have some basic familiarity with the greek alphabet, you will know the names of the letters. And can just write them as commands. No need to print the whole alphabet, right? If you don’t know the Greek alphabet and need it regularly, learn it please?

Like I will elaborate in the “design” section below, every detail which is in the slightest bit  unnecessary will ruin the overview and undermine the purpose of your cheatsheet (quick access to relevant info).

If the overview is so poor and you’re faster Google-ing your wanted information, what the hell do you need a cheatsheet for? Unless you have no internet, of course. So when preparing a cheatsheet, don’t go thorugh all the beginner’s tutorials and add everything they have (unless you want to make a beginner’s guide, but if you do so, please do so explicitly).

Look for information which fits the criteria below:

1. If you feel you absolutely need to add in some basic function, don’t waste a lot of space for it. Or demonstrate the basic thing while demonstrating something more advanced or rare.
2. Don’t add things you might ever only need once, like infrequent symbols.
3. Don’t add startup info unless you’ll need it more than once. Also, make this a “detail on demand” (see design principles below) if you feel you absolutely can’t go without it.
4. Also, just generally avoid adding “extensive lists”. If your cheatsheet is supposed to be a memory aid, keep in mind that the brain can only process so many chunks at a time (3-5). Accordingly, one block of information should not include more than 3-5 elements at a time.
5. Cut out anything unnecessary. Summarize, cut and shorten radically. Keep to the absolute minimum. Make it zen. Simplify. Really take the time to do this, it will maximize your benefits.
6. Good cheatsheet design takes up a lot of time. But once the cheatsheet is done, it will be useful to you for a long time.
7. Don’t just sit down and create a cheat sheet. A really good cheatsheet will need some design first. Brainstorm, see what information you want to include. Note down everything you feel you need, then shorten radically and find creative ways to make it more to the point.
8. This creative process is what we might call editing. There is this quote: The first draft of everything is bullshit. What it means is that most people stop before the actual work starts and that’s why their results are bad. Outputs only get really good if you sit down to edit them and make them better, design them carefully, etc. When writing a paper, for example, putting the info on paper is only half of the work. Internal editing, peer review, etc. will make the final result take about twice as long as the inital step of “writing the paper”. Most seminar papers are bad because students just stop after they have sloppily collected and written down the information. The papers end up lacking detail in research but also lacking grammatical corrections, reformulating to make the outline and the sentences more clear, etc. The same goes for anything you produce.
9. A good cheatsheet is something you might want to use for a long time or even share with others so they can profit from it too. If you make a good summary for studying, you can use this as a memory aid or refresher long after the exam. If, and only if, you did it well to begin with. Or imagine you want to take an advanced class. A good cheatsheet will make sure you master the basics, and if you don’t, have them at the ready whenever you need them. Or, when preparing for an exam, the extra time might seem a waste of time – but, on the plus side, you’ll be way further along in your studying if you have taken the time to make a high quality cheatsheet, and you also have a good point to start should you happen to fail the exam. Whoops.

## Basic design principles

Data vizualization 101 also applies to effective learning and, thankfully, the most important principle can be summed up in one single sentence:

Overview first, zoom in, detail on demand. (Shneiderman’s Mantra)

1. Overview first: means big headings about the subject of every block.
2. Zoom in: you go from the “hook” which is the heading to the actual information, i.e. details (in this case).
3. Detail on demand: this works well in responsive applications but how to implement this on an analogous piece of paper, you ask?

When I prepared class summary sheets for studying (and I used to be very religious and peculiar about this, believe me. In fact, I probably still am.), I made big headings (stage 1: overview first), then added the info below (stage 2: zoom in) and added details in such a small font size that you had to physically get close to the paper to be able to read it. As I wrote this by hand, the writing became almost impossible to read. And that was the brilliant part of it.

The point is, we mostly are so afraid to leave some less than important piece of information out, because we feel like we’re going to miss out (or something, I can’t even really explain why). We’re afraid this information is a crucial detail when mostly, you’ll never need it again. Also, by noting down all the information, we are lured into the false security of thinking we have it noted down anyway, so it’s not so important we actually memorize it.

While this is not exactly the goal of learning, it also makes us end up with pages and pages of notes which we will never get through when studying for the exam. Also, working like this, we will never ever actually have an overview what the class was about and since teachers mostly fail to mention which ones were the most important contents, we will probably remember the least important detail only. Congratulations.

The cheatsheet is not a universal reference and not the place where you “write down everything”. You only write down that which is important and choosing what is important always means you’ll have to discard certain items. The study cheatsheet does not need to include everything, that’s what books, Google or your notes are for. The cheatsheet sums up the most important stuff in an overview.

I don’t always follow my own advice, of course, and tend to want to include every little detail. But once the summary is done and I acutally use it, I always regret including too much detail, especially the absolute basics. I find the best way here is to include them but

a) keep it small and

b) include it combined with some other less important information you kind of want to include but wouldn’t be important enough otherwise.

I sometimes write my summaries while a class still goes on: I reserve a spot on the (analogous) paper for every session. My university classes are usually 12 to 14 sessions. This is more tricky, of course, since something which seemed new and important at the beginning might be obvious and unnecessary once you’re deeper into the topic. Avoid reserving too much space for the basics as they are likely to end up not being important anymore. Or write your cheatsheet in LaTeX (of course 😉 ). You’ll be able to modify it in the way that makes the most sense once the class is over, there is nothing more to be added and you’re doing revisions. So these are the key principles:

2. Boxes ( don’t add more than 3-5 chunks)
3. White space: Unlike many other cheatsheets, don’t use every inch available to you. Don’t cram in every detail. Space it out, it will greatly benefit the overview (and thus, your learning).
4. If you absolutely can’t go without some detail, make it so small you’re almost unable to read it. Force yourself to have to remember it. Don’t count on the fact that it’s all there and all available at one click.

## The Cheatsheet – Template and explanation

The \mycommand command for displaying commands and their explanations uses \detokenize to display code. It functions as explained here . However, some problems remain, like you can’t use \maketitle or comments (%) in the command.

Also, don’t forget you can’t add any styling to the command part of \mycommand. This should be obvious but I catch myself trying to insert commands and wondering that they’re just displayed as text all the time. 😉 It usually takes me a few seconds before I realized this is a feature I actually knowlingly configured to work as such.

The subboxes are done using tcbraster (indicating the number of columns). There would be an option to indicate rows as well, but I couldn’t see why I would need that and if one ever should, one could just use 2 mulitboxes (works just fine, if you ask me…).

## Playing around: Cheatsheet to beamer

After I created a cheatsheet using this template, I had the idea that I could ‘generate’ presentation slides from it. This was quite easy. I opened a beamer template and pasted the document body of the cheatsheet into it, replacing all the \begin{textbox} with \begin{frame}[allowframebreaks] and the \end{textbox} with \end{frame}.

This seemed like a quick and easy way to create slides from the cheatsheet. It turned out, however, that tcblisting has some issues with enumerate or itemize environments in the beamer documentclass. The co-presence of those two in one document will stop the whole thing from compiling due to a bug in the beamer class, apparently. It took me very long to find out why exactly, believe me.

Also, the resulting slides are not, like, suuuuper beautiful, if you know what I mean. The automatic framebreaks are not great but, at least, will give you working slides instantly, even if your boxes were very full (which probably they shouldn’t be in the first place…). The slides are nothing special, but they work as long as you never have code examples and lists in the same document. Or you’d have to rearrange your code exmaples from tcblisting to lstlistings. I do quite prefer tcblistings to be honest. And, in the concrete case, if you care to know, I had been late preparing my class which was supposed to happen in a few hours time, so I decided my students didn’t need the code on beamer 😉

So, that’s it for now.

So Long, and Thanks for All the Fish

the LaTeX Ninja

# References

1. Martin Krengel, Bestnote. Lernerfolg verdoppeln, Prüfungsangst halbieren. Berlin 2012.
2. 10 Tips for College Students, Steve Pavlina
3. Steve Pavlina, Do it now

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

I just cleaned out my old archived data and remembered I had this class with a teacher I really liked. But now, I hardly remembered her. Then I realized it probably had something to do with a weird bad grading situation that had left a sour taste with me.  Also, it happens that situations like this (and I defintely had more than one) were always in the Linguistics department. Anybody who knows me is aware that I am a language nerd, I love dialects, etc. I came to university really looking forward to studying Linguistics. Now I hate it, not because it turned out I disliked the subject but because of many bad grading situations where I felt treated extremely unfairly.

I had seen the papers my colleagues had handed in, they were obviously less good than mine (from formal standards already) and left an obvious impression of having been done carelessly in a haste. I was profoundly shocked. Maybe the teacher had taken to me so much because she had seen herself in me and thus, expected a publication-ready output. The teacher was not very experienced either, so this misconception might have easily happened to her. Since, of course, I was only in my fourth semester, I was not able to deliver that level of high quality she had expected from me and thus, graded me way more strictly than my less good colleagues.

## If a good student underperforms, ask what went wrong instead of lashing out on them

Beware of thinking a good student is you. Don’t expect your good students to be scientists. They are not, despite their apparent motivations to be come full-blown researchers one day. By ruining their GPA, you actually negatively influence whether they will one day be able to become researchers.

## On silence and introverts in class

Silence does not mean disinterest, like many teachers assume. It might just be that they’re an introvert. And even though they might have participated in the beginning of the course, stopping later might not mean disinterest. To give a personal example, I often participated very actively in classes I was interested in. But then the teacher focused so much on me that I felt awkward and didn’t want to be the center of attention anymore. Actually I had never wanted or intended to become the center of attention. I therefore stopped participating because being the center of the attention made me feel uncomfortable. This, the teachers usually took as a horrible insult and were furious.

I’m sorry, extroverted teachers. Have you really never thought about the fact that it might be uncomfortable for a good student to be called out to answer questions all the time? It makes your fellow students dislike you. Please don’t take this as an insult and also, definitely don’t base your grading on it! You are scaring away good students. I continue to dislike this particular teacher after years. The lasting impression was extremely negative. This didn’t happen only once either.

## Grade using check-lists to avoid mixing in personal emotions

I handle the problem of grading by having a check-list with points. So I don’t “grade” or hand out marks – they score on a check-list. That way, I as a person will not be the object of a student’s hatred. A lot of people actually recommend to do grading this way, especially if you’re still young or lack authority for whatever reason. That way, I can act like a mentor and trainer during my (very workshop-style) classes and still be fair in my grading.

Of course, coming up with these check-lists is some work in the beginning but it is very fair, good practice and will save you lots of trouble once complaints come in. And they will at some point. Another technique I find very useful is to ask a lot of the students (greater amounts of portfolio work to be done, in my case), but then am fairly easy on giving out points. That way, they feel like I grade so nicely, but they still have done more work than they would have otherwise, so it’s really ok when they all get very good marks.

Would be happy to hear how you handle these situations,

best,

the Ninja

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

# Riding higher waves

At the risk of boring you all with my frequent thoughts on better teaching, I wanted to give you another metaphor on good teaching, inspired by a surfing class I took. To sum it all up, surfing was great fun. But this year, I was a bit unfortunate to get teachers who were a lot worse than the ones I’d had previously. The high waves and the shallow water make for good metaphors for the basics and the advanced topcis I frequently drone on about in my philosophy of teaching well. So, there you go.

## The shallows and the high waves

The teachers were over-protective of us in the shallow waters. They helped more than we would have needed help and thereby, didn’t teach us to act independently. I wanted to do so, but it was not encouraged and we weren’t given any instructions on how to catch a wave on our own. They wouldn’t even let us paddle onto the wave ourselves, but rather pushed the board for us. This might seem very nice and thoughtful. At least, that’s how I felt at first.

But then, once we got to the higher waves – waves high enough for me to find them somewhat scary and thus, distract me quite a bit – they hardly helped at all! But since they had been so overprotective with the basics, doing everything for us, I didn’t have a feeling for how to catch a wave on my own. And this doesn’t exactly get any easier when you are panicked by the high waves. The more difficult situation we got thrown into all of a sudden made it difficult to think clearly, let alone grasp a skill on my own which no one had explained to me beforehand. The deep water is not a place to learn the basics. They should have told us those in shallow water. I think this is a very good analogy for teaching since this is exactly what happens in many classes as well. And then the teachers act like you’re an idiot for not being able to figure out the difficult stuff on your own. Because “that’s just what you do and we all had to learn it the hard way”. But really, this means that the teachers are not doing their jobs and there’s no excuse for that. Don’t blame your failings as a teacher on your students! Don’t turn your lack of teaching competence into a ‘character building’ opportunity for your students. This will not make them better people. It makes you a worse person. And a teacher I would fire on the spot if I were in the position to do so.

## Don’t excuse your bad teaching as being a ‘character building’ opportunity

This is very apparent in technology classes at technical universities. In the class, you get this ridiculously simple mini example which is so easy that everybody understands it rightaway. Subsequently, teachers go on to over-explain this for 10 minutes. All students, by now, are lured into a false sense of security because the example was easy. Then they set the task for the assigment and it’s 500% more difficult than the example. This, they pretend, is a learning progression. Hint from someone who actually is a qualified teacher and has experience with training with a systematic progression in sports: No, don’t be ridiculous. This is not a progression. A progression challenges you but doesn’t set tasks which are practically impossible to achieve with the basics training provided beforehand. A progressions means setting a challenging, but doable task – not a sink or swim experience. In these programming classes, usually only those survive who had more knowledge beforehand, came from schools where they’d had years of programming practice, or else, they had more advanced friends or relatives who agreed to help them.

This creates the illusion for teachers that the class is actually doable if you’re willing to put in the work. This is a joke. If you pretend to be a teacher whatsoever, your class should be understandable without help from relatives who are experienced programmers! In some of the classes, I even read all the suggested introductory books and 2-3 more but the class was still difficult because you had to look up hundreds of programming libraries and so on. I managed because I worked hard and had some emergency help from more experienced friends. Having to look up stuff is normal in programming, of course. But as a seasoned programmer, you already know what to search for and know where the new information fits into your previous knowledge. A newbie can’t – I repeat – can’t know that. Don’t blame them for your lack of understanding of how learning works!

Maybe it’s a mistake so many people teach at universities who have never gone through teacher’s training. That is not to say that teacher’s training only produces great teachers. We all know that, sadly, it doesn’t. But at least people necessarily have heard about how learning is supposed to work in theory. Having teachers who do not know nor care how learning and teaching is supposed to work should not be allowed. Yet this is the norm at universities. Students are lucky to come across a natural every once in a while. But it is no coincidence self-help gurus stress the importance of mentors: Not to say that you couldn’t learn it on your own. But your results are just going to be a million times better and faster if you happen to come across a good teacher.

## Clear instructions for the ‘danger zones’

Danger zones provide excellent opportunities for accelerated learning progress. But especially before being thrown into ‘dangerous situations’ the students are barely qualified to handle at their stage, giving out clear instructions is crucial. With the guidance of a good teacher and very, very clear instructions of what they should or shouldn’t do, treating students to  a difficult challenge will greatly speed up the learning process. If not done well, however, it will be a nightmarish experience which might even end up deterring students from going on with their studies!

Having something like a life line or a safeboat might be enough to circumvent this. Or having more time or trainers to guide students as much as needed. Don’t rush into these situations without carefully planning them. Students need thoughtful teachers who are there to help students when they need it. Maybe even teachers who anticipate pitfalls students are running into because they can’t know themselves due to lack of experience. If you don’t have a lot of means to make this experience as good as possible, use the one most important element: very clear instructions and some abundant background information before you start. It is also important that students understand why certain rules or behaviours are imposed on them or why certain actions might be dangerous. You can always limit the scariness scope of an overly taxing situations by limiting choices and options through clear instructions and rules. Reduce the scope of a problem and you’ll make success much more achieveable.

Another experience from surfing was on this utmost importance of clear instructions, especially with difficult tasks. On a side note, to avoid any confusion: Surfing was a lot of fun overall, not to give a misleading impression, I just wanted to use the opportunity to point out some interesting observations on teaching. Anyway. In the high waves, the teachers hardly took any notice of me at all. As a novice, I had a hard time paddling against the force of the high waves and was constantly being carried away by the current. I was busy remembering where I was and keeping a vague orientation by looking for where the teachers were. Now was the time when I would have needed their help they had so over-abundantly and unnecessarily given to me in the shallows. I didn’t know whether I should just take the next wave I deemed ok (how the hell should I know which wave is ok? But anyway…) or if I should wait for the teacher to make that choice for me, which they had previously done most of the time.

Just a thought for now 😉

Best,
the Ninja

PS: Oh, and my experience would probably be a starting point of discussion on multiple teachers who are teaching overlapping topics in parallel but contradict themselves. But that’s a topic for another time…

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

# Improve Your Teaching – 10 Simple Tricks

As you might know, good teaching is important to me, so I wanted to share ten simple tricks which I think can improve your teaching. Most of them are about making sure people get the basics which, in my opinion, is one of the biggest mistakes people make in teaching. Let’s get straight at it.

### 1) Make sure the preliminaries are clear before starting an explanation.

If they are not, don’t even bother starting on the explanation, it will be a complete waste of time. Even if this means that you will spend the whole lesson bringing them up-to-date with the preliminaries and you won’t be able to start on the actual topic at all. Make time for this prep work or risk that all of your subsequent explanations will not get through. To find out if the preliminaries and basics are not clear, you might have to plan testing your students regularly (at the start of each block), like with the basics (see nr. 3).

### 2) Don’t just “get through with the material”.

Teaching is not about you doing what you had planned, but about students learning something. If you misjudged their previous knowledge, change your plan. Bring them up-to-date. That way, they will have learned something (and thus you have reached to goal of teaching), even if you end up not even being able to start on your actual topic at all. Would you rather be “done” with everything you had planned but nobody understood anything or rather do 1/3 of what you had planned to do but be sure that students really master it? I would much rather go with the latter. Or the result will be that your class will not have made any lasting impression on the students at all. Don’t let them leave the way they came!

### 3) Nothing is more important than absolute mastery of the basics.

Nothing. I repeat: Nothing.

I often find teachers go over the basics way too fast without ever checking if the students got it, because they think it obvious. Students also often don’t even realize their lacking understanding of the basics because they seem so simple. But really, what is the difference between an amateur and a professional musician? It’s not that the professional plays more advanced pieces, since the amateur can do that too after some time. But they are still no a professional, right? – That’s because mastery lies in perfecting the basics and total immerson, not skimming as much advanced stuff as possible without ever mastering anything. A professional musician spends more time doing drills on the basics – and you hear the difference immediately. Once you’re good, you can always learn more complicated advanced stuff and go on studying independently. But you will have a hard time improving on your own if you’ve never even mastered the basics.

No matter how friendly you are, they are unlikely to tell you what they don’t understand, especially admit to not having understood the material you have spent the last three weeks talking about. You can, of course, scream at them for being lazy or stupid. But no matter how you react, this will not change the fact that they did not get the basics, so any further teaching of more difficult matters or, in fact, anything which forms a progression building on these basics, is going to be time lost and nothing else. Yes, the good ones will make it. But please, don’t just settle for that.

(When doing this, act like a coach. Don’t give the impression of testing anyone and don’t grade this or they probably can’t enjoy it in the future. I don’t want that sort of pressure in my classes. Grading is for the final portfolio they hand in, not the learning process where we want them to make as many mistakes as possible! I sometimes use anonymous Google Forms so I can see whether the class overall has a good grasp on concepts but they are sure not to be graded since it’s anonymous. Also a great method of getting feedback throughout the semester, not just at the end.)

Also, I suggest you encourage students to go over the basics again every once in a while and with every stage of their progress. You see them differently each time and taking the time to repeat them is always worth it, especially if you want to really master something.

### 4) Test. Don’t assume learners learned anything before you’ve ascertained it through multiple tests.

This is not meant in a condescending way. Testing is proven to be the most effective learning technique (“learning types” are not scientifically valid – see the audiobook The Great Courses / The Learning Brain for details). Only once you’ve tested you really know what students already know. Often you realize that you already lost them before your first word because you stepped in too late. They might not even have reached the starting point of your explanation. These problems, however, are difficult to spot since usually in these cases, students don’t even know what they didn’t understand and cannot verbalize it when you ask.

### 5) Avoid confusing naming in programming.

This is not as trivial as it sounds. It might even be pretty difficult to put yourself in a learner’s position and choose a name which is not confusing or misleading. But all the more crucial to take the time to think about it.

For a student who doesn’t fully grasp the concept of how variables  work, what types and instances are, or classes and objects, this can be very detrimental and make learning so much more difficult. In failed teaching attempts in programming, bad naming is mostly the major culprit. Right after that comes the failure to reduce complexity and purge unnecessary detail. Choose names wisely. They make or break you explanation.

### 6)  Make sure you always only teach one new concept at once.

It happens far too easily that you explain three things at once without realizing. This also happens when you include unnessary detail which might contain concepts students are unfamilar with and end up confusing them, even though this wasn’t even what you were trying to explain.

### 7) When explaining something, remove the unnecessary.

Putting didactical reduction into practice means get rid of every detail which is not absolutely crucial to understanding the point or students will get confused by the multiple concepts and not see the point at all.

Also, try to eliminate all sorts of examples which might build on extra knowledge your students might not have (like in 6, be sure you really only teach one new concept). So, you might want to use an example of a historical situation which is completely familiar to you (in your crazy scientific surroundings). But are you sure your students are familiar with it? When explaining something new, not only reduce what’s new but also make sure to keep other potentially confusing artefacts out of the explanation. Maybe it wasn’t even that they didn’t understand the new concept – they already got hung up on the ingenious illustrative example you assumed would be totally logical to them. Don’t assume previous knowledge. At least reduce to a bare minimum. Just in case.

### 8) Always repeat what is important.

While this might be clear to you, for a student “everything” seems important. And all is new. They cannot tell what is important yet. It is your job to triage here! That’s why I really miss handout culture. There, you had the summary of the gist of a lesson. Now it’s just slides, but the slides usually don’t give you much of a clue about what is essential and what can be discarded. If students have to do the guesswork on their own here, they will waste a lot of time and maybe fail altogether. It’s definitely part of your job to help them out here. Take the time to make a summary for them for later reference. Don’t assume they can do that themselves or else they are lazy. Appreciate that you already know what’s important and therefore, have it easy to sum it all up. After all, you planned this lesson and you know what’s most important to you that they should take away from it, right? Just write it down and they can use the additional time to memorize. (Yeah, of course, they might also just not pay attention to anything else anymore. Find a way of doing this without self-sabotaging your classes.

### 9) Help them help themselves.

Often teachers get annoyed that students are very dependant and don’t know how to find out something by themselves. But ask yourself, did you ever explain them how to do it? Ironically, students depend on you to teach them how to be independent.

### 10) Nothing is obvious.

Rule of thumb: It’s highly likely you lost your students about 3 steps earlier than you think where you lost them.

That’s it. Hope it helps!

Have a great Sunday!

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

# Didactical Reduction, Part II

In my first post on didactical reduction, I argued that reduction of learning materials to meaningslessness can be detrimental, that teachers should trust in their students’ ability to learn and rise to a challenge. In this post I want to discuss ways of reducing complexity which actually makes sense. The gist is: reduce unneccessary detail, not difficulty. Build complexity in a carefully chosen progression.

## Telling the difference between unnecessary detail and challenging complexity

In my post on why programming classes fail and learning ‘algorithmic thinking’, a main example was that students starting out programmig don’t need to know about data types. I will stick with this example here because I just think it illustrates my point so well. The skill to learn I discussed in the post really wasn’t the ‘vocabulary’ of your first programming language, but ‘learning programming’ means successfully communicating with a computer and in order to do that, you need to develop the skill of algorithmic thinking. This skill is independent from your chosen programming language, so you might as well start with a visual lanuage like PocketCode’s Catrobat or Scratch. I would even encourage you to do so.

### My favourite illustrative example: data types in introductory programming classes

When took my first programming class, already in the first or second lesson, I was bombarded with data types. I might add now, that since I never write programs that calculate anything, I have never really needed any more datatypes than int, char, string and complex data types to this day. Other primitive datatypes I have ever only used in ‘fake examples’ or ‘program your own calculator’ tutorials. All while you can generally get away with not very much programming in the Digital Humanities, even though I try to program as much as possible, I have never needed any of the other data types to this day. And that first programming class I took was in 2016. So maybe you see what I’m getting at: a new learner really doesn’t need to know about data types. They should maybe informed at some point – once they have mastered string and int – that there are, in fact, other data types which they might need later on and to pay attention. But that should be about enough. Especially since every book on learning a programming language features them anyway. So your students will know where to find out about data types. Once they actually need them.

In that first class, when we were told about datatypes, the only thing it did for me was turn on this destructive internal dialogue: “What? What does it mean? What do I need it for? Should I learn this by heart now? (like how many bytes an int has… the internal representation is different depending on your computer anyway, I must add years later).” And it went on like this. But the most important thought it generated in my mind is this one – I will print it in bold because it’s important: “Wow. Programming must be really difficult. Maybe I’m too stupid to understand it.” This is the common thought students have in this situation because they are fed information which don’t fit into the learning grid in their heads. Unless they have had previous programming experience and already know the content you teach them, it is plain impossible to understand this new information because there isn’t enough context. This means you have utterly failed as a teacher, congrats. So please don’t do that. Only teach things which can find a place in the student’s internal thinking grid. They will not remember information they don’t know where to put. So that’s a complete waste of time.

### Children’s books don’t mention data types

I have made the effort of checking many “learn programming” books for this example and it turns out that children’s books never mention data types but books for adults always do. So if in doubt, and if you really have no previous programming experience since children’s books usually start at a low entrance barrier (which can be good but maybe won’t be challenging enough for you), just get a children’s ‘learn programming’ class. They are way more sensible. They introduce concepts only when they’re really needed. If you’re not a complete beginner anymore, some more theory would be better. Remember, I am also a big fan of ‘the bigger picture’ and argue that you should, in fact, learn more background information than strictly necessary (see my post on learning from tutorials vs. books). It is assumed that a didactical approach is essential when teaching children, yet somehow people seem to think adult learning was different.

### Imagine explaining everything to a child. Then apply this to adults.

So what I really mean is that you should not reduce difficulty or complexity, but you should reduce unnecessary detail. As a teacher, it is extremely difficult to leave things out, you always want to be as thorough as possible, I know this from experience. But that isn’t good teaching. Good teaching is learning, step by step, to leave out the unnecessary. Learn to simplify. If you don’t know how to explain something in a very simple way because you think the topic to be soo complicated and you just can’timagine how you would explain it to a child or to your grandma and there you go.

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. (Antoine de Saint-Exupery)

## Systematically planning for effective teaching

It is interesting that we usually give this kind of advice to our students for preparing presentations yet we totally ignore it for our own teaching. Especially, if you teach at the university, you feel like it’s not your problem to simplify things. Students should just suck it up. Well, plot twist. No they shouldn’t. Maybe we should take some time and plan for effective teaching. Because from my experience, I feel that respecting a few simple things will already do the trick.

### 1.) Leave out unnecessary detail

To “automate” this, especially for classes where there are pratical parts, just plan the practical parts first. Note down only the information needed to complete the practicals. If you end up feeling like important concepts are missing in the end, mention those in the form of a glossary (key term + max. 1 sentence explanation you can put in a visual info block). Unnecessary detail clouds your students’ minds. Unlike you, they lack the experience to tell for themselves which bit of information is important and which one is just a nice-to-have. So they end up with tons of learning material,  large amouts of things to study in a non-brain-friendly format. It will take them ages to write up a summary and find out which parts can be left out and which can’t. For you, making this clear would probably take 5 additional minutes. If anything, always end with a “things to remember” final slide which sums up the concepts you expect them to know by the next lesson. You know how to tell the difference between signal and noise. That’s why they employed you to teach. So rise to your responsibility.

### 2.) Provide short survival summaries with the most important takeaways

I explain this in the tutorial post on study summaries. Force yourself to sum up all your classes’ contents in no more than one page per lesson and then, at the end, create a survival summary, which sums up the most important concepts from the 12 one-page-per-lesson summaries in one single page. All the detail you need can go into the lesson summaries, the final summary is equivalent to a pass grade in an examination: If the student knows and understands all the concepts on it, even if they know no details whatsoever that should be worth at least a pass grade.

### 3.) Choose handouts over ‘the slides culture’

Over the last years, I noticed that hardly anybody does handouts anymore. People think that their students have the PowerPoint (or LaTeX!) slides  anyway and can learn from them. But there is an important difference: Slides often contain illustrative examples or unimportant details and mostly, there are way too many slides. Students end up completely lost for which information is important. Provide a one-page handout. This forces you to stick to the key takeaways and leave away unimportant detail. You can still have details in your personal notes and mention them. But please do take the time to hand students a more didactical document than your personal notes. If your notes are sometimes confusing to yourself, the master and producer of that chaos, how do you expect non-experts to understand them?

### 5.) Don’t forget the generic “How to approach this type of problem” summary

Like I talked about in the “learn programming” post, the “how to approach this problem” part for starting out programming is not the “vocabulary” of a programming language but algorithmic thinking. Where do I start when I am faced with a task like this? That is actually what you should be teaching. It’s called getting people actionable skills. Teach them to teach themselves, the tricks to make things easier, where they can find information, etc. Take the time to write this out even if you feel like your students should already know this because it came up in a prerequisiste class. Don’t play strict here. You’re only hurting your own class if you insist that people should already know this by now. If they don’t (which is likely to be the case), make it your priority to fill the gaps in their knowledge in the most effective way. Make sure they don’t end up in your colleagues class with an even bigger pile of “stuff they would have already be supposed to know”. Don’t cry over spilt milk. Wipe it up before it starts to stink.

They don’t know everything and still have things to learn, else they probably wouldn’t be in your class. Prepare something to do for advanced students. I mean, honestly, even as an unexperienced teacher, deep down you can tell before you’ve even met your students that their skill level will not be homogenous. So why didn’t you prepare for it in advance? Offering a cool project for advanced students isn’t so difficult. Prepare it once and reuse it forever. Take this one hour it will take to come up with a more complicated problem (you probably already have one in mind anyway) and spell it out in a way that students can work independently. Give them book suggestions or links where they can learn what they need so they don’t need to interrupt your class.

The “mini-project method” also allows you to take extra care of slow students without guilt – you can let everybody else start on the mini-project (which took you one hour to prepare one single time and can be reused indefinitely if it was a good project), so it won’t be at the expense of their learning experience.

Writing this down, I realized I really have a lot of thoughts on this, so expect another follow up at some point 😉

Bye for now,

the LaTeX Ninja

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

# Why most “learn programming” classes, books and attempts fail

This seems to be a bold claim. Let me explain… There are two reasons why I think most introductory programming classes fail ant that is a) because they never actually teach prorgramming (i.e. “algorithmic thinking”, not the syntax of one concrete language / “your first language”)) and b) because they bombard students with tons of complicated subjects which are not necessary at the beginning, so nobody remembers or understands them anyway. But they confuse the students and distract them from what they really should learn like how to interact with the machine and basic flow control. Use a visual language (like Scratch for PC or Catrobat for mobile devices) and thank me later.

## Algorithmic thinking

When we want to learn or teach how to program, we first need to define what programming is. Like in a human language, knowing the words and the grammar is not enough – knowing a language means “knowing how to communicate using that language”. For programming languages, this means what we might call “algorithmic thinking”.

Sadly, in most beginner’s programming classes, this is not taught. And this is also why in many classes on learning how to program, only those students succeed who already kind of knew how to program beforehand. Why is that, you ask? Because those classes  that have failed their students have never actually taught programming. The class listed some of the “vocabulary” of an example programming language. It maybe explained about data types, gave you information you didn’t know what to do with and forgot almost instantly.

## You were fed all sorts of facts of “knowledge” but never got around “operationalizing” them.

John Sonmez thinks the same way when it comes to learning a new programming language when you already know how to program. Most people ( = learners) and, sadly, also most teachers, don’t get that in order to really teach programming,  they would have to teach algorithmic thinking on the example of one programming language. Not “show around” the programming language and wonder why nobody had learned anything.

## Why you don’t need to learn about data types just yet and should start with a visual language

This is also why I would recommand a visual language to start out, like I explained in the [cheatsheet post](LINK) of this blog’s “learning effectively” series. Even more than high-level programming languages, visual languages allow you to ignore the low-level stuff for the beginning. (Data types being a high-level “symptom” of what I have just called “low-level stuff”. – Don’t kill me please.)

You can say whatever you want, but at this early stage you just don’t need to know about these concepts. Not when you’re barely starting out and have never programmed before. These concepts scare people away. These concepts make things complicated when they need not (yet) be.

If you want to learn effectively (this is valid for any kind of learning), you need to focus on one thing at a time. When starting out on your programming journey, learn algorithmic thinking first.

## Programming essentially is “problem solving using a computer”

So a class on starting programming should not teach “the vocabulary” of a language (not the grammer either). It should focus on giving you strategies for digital problem solving which is more or less the same thing as effectively communicating with the machine (if we want to use the human-language analogy). In learning a human language you would never expect to master the language just by learning some vocabulary and grammar by heart. You know that you have to be able to use it first. That means, you need to find out how to communicate effectively in that language.

Also we shouldn’t fall victim to the fallacy that starting to learn programming is synonymous to learning your first programming language. You could theoretically learn algorithmic thinking in pseudo-code without ever seeing a concrete example (which is not anything I would advise, however).

So when you teach an introductory class to programming (to people who might never have programmed before), maybe think of me and keep this in mind.

I myself have fallen victim to this and endured many boring and ineffective “start programming” classes. If you want to start programming, would like to follow my advice but don’t know how to start, I suggest my [post on how to find a “starting out” project](LINK).