The main thing is to keep the main thing the main thing. -- Steven Covey, 1989If you Google this English phrase, all the hits lead to Steven Covey's book, as if he invented the line, but *I* first heard it from my theology professor in the late 1960s, who also quoted it in the original German and said he got it from his professor in Germany (probably in the early 1950s, but he didn't say). So I Googled the German version, and it came up with some undated collection of sayings from Johannes Winklhofer, who started a bicycle shop in 1885 and later turned it into a major German automobile manufacturer. Covey got it from the same place my professor's professor got it, Winklhofer.Die Hauptsache ist, die Hauptsache immer die Hauptsache bleiben zu lassen. -- Johannes Winklhofer, 1885?
[If you don't know German, but you want to pronounce this line correctly, you need to learn the 'kh' sound in many languages but not English: make a 'k' but let some air through, sort of like the difference between 't' as in "tin" and 'th' as in "thin". Notice that 't' always stops the air flow, but 'th' never does, but makes a sort of rushing sound. Think of 'k' and 'kh' the same way, except in the back of your mouth. If you can't pull it off, not to worry, in parts of southern Germany it comes out like the English 'sh' and that's good enough.
So I will give you English word spelling to help you with the strange (to us) way Germans pronounce their words. All the multiple syllable words here have the accent on the first syllable. In English unaccented syllables are all pronounced 'uh' but in other languages like German you should carefully form all the vowels correctly, even when unaccented:
Dee [like the letter 'D'] How+p'+zah+kh+eh [all one word, three syllables, accent on "How"] ist dee Howpzakheh immer [like "inner" only with 'm'] dee Howpzakheh bligh'+Ben [rhymes with "sigh" then the guy's name "Ben"] tsoo [rhymes with "zoo"] lah'+sen [ like English "lot" without the 't' + "send" without the 'd']The German word "Hauptsache" means "most important thing". The Germans actually pronounce the 't' in it, but it goes by so fast, if you leave it out, nobody but a die-hard Germanophile will notice. The German word "immer" means "always". The word "bleiben" means "remain". The word "lassen" means "allow" and "zu" is the same as English "to".So literally this comes out "The most important thing is to always to allow the most important thing to remain the most important thing," except the Germans put all their infinitive verbs -- that's the verbs with a "to" in front in English -- at the end of the sentence.]
That's probably more than you wanted to know about German, but it makes great trivia
It's a great line, and an important part of Top-Down Design: Keep the main thing the main thing, and ignore the irrelevant details. They will be "the main thing" in their own time and place, but keep your focus on one thing at a time.
The "Cowboy" phase of computers is pretty much over, all the easy programs have already been written, so all the fun new stuff must be done by teams working from a shared design specification. We think, we hope, you will be the person creating that design, but the best ideas will come from somebody else, so don't be afraid to get good ideas from wherever they come from. The best leaders are the ones who capitalize on other people's strengths. You can do that, but it takes intentionality. It also requires that you focus your attention on "The Main Thing."
At the top of our TDD, The Main Thing is what this whole program does. Usually somebody else will tell you (in loose terms), but you get to turn that into a one-liner. It takes hard thinking. Like in sports, soccer and basketball and (American) football are all "keep-away" games, one team has the ball, and they try to keep it away from the other team. You win by scoring points, and you only score when you control the ball, so most of the game is keeping the ball, or trying to get it back. Baseball is a "tag" game. Tennis and chess and Ping-Pong are a different game, much like war before 1776, the two sides take turns shooting at each other. The Americans put an end to that, we invented guerrilla warfare, hiding behind trees and darting out to shoot, then hiding again before the other side can shoot back. Now the small countries are doing that to us.
The point is, you want to think about what the main thing is. You won't get it all by yourself (nobody can) so get advice from everybody. In the early stages, that would be me or a Mentor, maybe even another student. But you need to do the understanding. In a calculator, the main thing is to add (or multiply, or whatever) two numbers and show the result. The math and the display are two different things, keep them separate. Later details, you can figure out how to do multiple operations leading to a single result. The result is still The Main Thing, so keep it The Main Thing, don't tangle it up with the printing, the printing just prints the result. The result is The Main Thing.
In a word game like (what we call) Seaman -- you know, the game where you draw the stick figure -- The Main Thing is that we have two players doing different things (like baseball), so then we work on each player as its own Main Thing. Once you figure out what a sub-task is, and you start designing that task, don't wander off into another subroutine's duties, keep your focus.
When you get to the GameEngine and you start to do your own video game, the first thing is to decide what is The Main Thing. Maybe it's a snake roving around the screen, and the player gets to control where it goes, and your game controls what happens when it bumps into something, but The Main Thing is the snake roving around. Or there is stuff raining down from the sky, or a little guy running and jumping. You need to keep The Main Thing The Main Thing.
And when you are looking at a small part of your program, that subroutine becomes The Main Thing, don't go wandering off into another subroutine's territory -- unless that's part of what The Main Thing is for that subroutine. Decide ahead of time. Maybe you got it wrong, so fix your design, but do your design in English, first in your head, then in pseudo-code (in English, so you understand what you are doing), and then you write the real code.
The Main Thing is to keep The Main Thing The Main Thing.
Can you do that?
First draft: 2022 October 11