Random thoughts and musings. Part of an oliology.

oliology.diary

Sonntag, Juli 06, 2008

Productitvity for coders
Produktivität beim Programmieren

After a really long day that was really not productive at the end, I've compiled some thoughts about productivity for coders:

  • Make use of the usual best practices, and be consequent about it: well-documented code, SVN, bug tracker and so on.
  • Do pair programming (except for routine stuff). Compared to the hacking-away-at-problems-alone approach and the reviews, this saves time.
  • Put a bottle of water next to your keyboard and drink from it regularly. Select some kind of water which you like and of which you can drink four liters per day without problems (for me, that's tap water).
  • When you're stuck, continue trying to solve the problem. When you're really stuck, have a break and do something completely different: Go for a walk, eat an apple, take out the garbage, do some juggling, sit down in the sun. The important thing is that your brain chemistry can get some balance again.
  • If you're stuck even after the break, explain the problem to someone who hasn't been working on it yet. Maybe explaining it already helps you see the solution, or maybe he/she has an idea or can spot the error.
  • Remove as many distractions as possible: phones, aggressive mobile phone sounds (Lars!), some kinds of music, unnecessary comments from co-workers, permanent Are you finished yet? questions from your boss … It might help to close the door, use ear plugs or noise-canceling headphones, put a do-not-disturb sign on the door, close your e-mail program and your chat client.
  • Make a plan on paper before you start coding: Draw some UML, think about the necessary unit tests, draw some other picture. And talk about it with your programming partner.
  • Du Test First very consequently. Each time you ignore this will have its revenge really soon.
  • Arrange your keyboard, mouse and screen so that your sitting right in front of it and typing is easy. Get a good keyboard and mouse.
  • Clean up your (physical and virtual) desktops so that there're nothing in the way which could distract you.
  • Write down everything that's floating in your mind and put it into your trusted system (GTD!) so that your working memory is empty for the task you're going to tackle.
  • Only do one task at a time. You cannot really multitask, and task-switching is expensive.
  • Know the times when you're the most productive, and do your programming at those times. Move away meetings, e-mail processing and administrative stuff to other times.
  • In your afternoon sleepiness time, do some 20-minute powernapping or relaxation exercises. This will help you to skip the two- oder three-hour period with severely reduced productivity.
  • Get enough sleep at night and live to your chronotype. (For example, if you're an owl, you shouldn't get up at seven if you want to reach your top productivity. And larks benefit from getting up early.)
  • Perceive when it's enough for the day (usually, that's after an average of eight hours). If you want to continue after that, be aware that you're borrowing energy from your next day (because you'll be less productive the next day). Overtime only makes sense (apart from the macho spirit: I'll kill myself if necessary to finish this project!) if it actually allows you to finish something today and you can afford to be less productive the next day. All in all, overtime reduces your productivity because you're not very productive in that time: You introduce errors, don't see the obvious or go down the wrong paths. It's better to invest the time the next day when you're rested and fresh.
  • Create small, incremental patches and commit often. This allows you to start over withou having to toss six hours of work. (And if you're using peer review instead of pair programming, this also is a lot faster with smaller patches.)
  • Learn the keyboard shortcuts of your development environment and create some code templates.
  • Your emotional state affects your perception, memory, concentration and your ability to think logically. When you're angry, then invest some time so that you feel well again so you can be productive again.
  • If possible, avoid stress. Productivity for demanding mental activities is highest when you're in a slightly relaxed state. (For routine acitivites, productivity is highest when there is a bit of stress.) In addition, stress is bad for your health—and being sick is a real productivity killer.
  • Take frequent break to gather new energy: Strech. Get enough sleep. Have a day completely without work at the weekend. Go on vacation.
  • Be kind to yourself. Your body is you most valuable asset, and all mental processes actually are bodily processes (with hormones, electricity and so).
  • You're not equally productive on all days: On some days you make a lot of progress, on others less. That's this way for everybody, cannot be avoided and absolutely is okay.

By the way, most of the items on these list aren't originally by me, but have been taken from numerous books.


Hab mir nach einem viel zu langen und am Schluss echt unproduktiven Tag neulich mal ein paar Gedanken zum Thema Produktivität beim Programmieren gemacht:

  • Benutze die üblichen Besten Praktiken, und zwar konsequent: ordentlich kommentierter Code, SVN, Bugtracker und so.
  • Programmiere möglichst immer zu zweit (außer bei Routineaufgaben). Das spart gegenüber dem Alleine-an-Problemen-Knabbern und den Reviews unterm Strich Zeit.
  • Stell die eine Flasche Wasser neben die Tastatur und trinke regelmäßig davon. Suche dir das Wasser aus, das dir gut schmeckt und von dem du ohne Probleme an einem Tag vier Liter trinken kannst (bei mir ist das Leitungswasser).
  • Wenn du festhängst, versuche das Problem zu lösen. Wenn du wirklich festhängst, mache eine Pause und beschäftige dich mit etwas komplett Anderem: Geh spazieren, iss einen Apfel, bring den Müll raus, jongliere eine Runde, setz dich in die Sonne. Wichtig ist, dass deine Gehirnchemie wieder ins Gleichgewicht kommt.
  • Wenn du auch nach einer Pause nicht mehr weiterkommst, erkläre jemandem Unbeteiligten das Problem. Entweder kommst du beim Erklären schon auf die Lösung, oder er/sie hat vielleicht eine Idee oder sieht den Fehler.
  • Schalte möglichst viele Störungen aus: Klingelnde Telefone, nervende Handytöne (Lars!), ablenkende Musik, unnötige Kommentare von Kollegen, ständige Wann seid ihr denn endlich fertig?-Fragen vom Chef … Schließe bei Bedarf die Tür, benutze Ohrstöpsel oder schalldichte Kopfhörer, hänge ein Nicht-Stören-Schild an die Tür, schließe dein Mailprogramm und deinen Chatclient.
  • Mache dir vorher einen Plan auf Papier: Male ein UML-Diagramm, überlege dir die Unit-Tests, male irgendein Bild. Und rede mit deinem Programmierpartner darüber.
  • Programmiere absolut konsequent Test-First. Jedes Mal, das du davon abweichst, rächt sich ziemlich schnell.
  • Richte dir Tastatur, Maus und Monitor so ein, dass du gerade davor sitzt und gut tippen kannst. Besorge dir eine gute Tastatur und eine gute Maus.
  • Räume deinen (physikalischen) Schreibtisch und deinen (virtuellen) Desktop auf, so dass da nichts rumliegt, was dich ablenkt.
  • Schreibe alles auf, was dir so durch den Kopf geht und tue es in dein vertrauenswürdiges System (GTD!), so dass dein Arbeitsgedächtnis frei ist für die Aufgabe, an der arbeiten willst.
  • Mache nur eine Sache gleichzeitig. Du kannst nicht wirklich multitasken, und das Umschalten ist teuer.
  • Kenne die Zeiten, in denen du am produktivsten bist, und lege deine Programmierzeiten dahin (und verschiebe Meetings, Mails-Bearbeiten, Verwaltungskram und so auf die anderen Zeiten).
  • Mache in deinem Mittagstief 20-Minuten-Powernapping oder Entspannungsübungen. Dadurch kannst du vermeiden, zwei bis drei Stunden lang viel weniger produktiv zu sein.
  • Schlafe nachts genug und richte dich nach deinem Bioryhthmus. (Wenn du zum Beispiel eine Eule bist, solltest du nicht um sieben aufstehen, wenn du deine maximale Produktivität erreichen willst. Und wenn du hingegen eine Lerche bist, ist frühes Aufstehen eine gute Idee.)
  • Merke, wenn es genug für den Tag ist (das ist wahrscheinlich im Durchschnitt nach rund acht Stunden der Fall). Wenn du danach noch weitrerarbeiten willst, sei dir dessen bewusst, dass du dir die Energie vom nächsten Tag borgst (dann bist du nämlich entsprechend weniger produktiv). Überstunden sind (mal abgesehen vom Macho-Denken: Ich bringe mich notfalls um, um das noch fertig zu bekommen!) nur dann sinnvoll, wenn du die Sache an diesem Tag dadurch noch fertig bekommen kannst und du es dir leisten kannst, am nächsten Tag entsprechend weniger zu schaffen. Unterm Strich bringen Überstunden weniger Produktivität, weil du in den Überstunden wenig produktiv bist: Du machst Fehler, übersiehst Offensichtliches oder gehst falsche Wege. Diese Zeit ist besser am nächsten Tag investiert, wenn du frisch und ausgeruht bist.
  • Mache kleine, aufeinander aufbauende Patches und checke oft ein. So kannst du auch einmal etwas Arbeit wegwerfen und neu anfangen, ohne dass du gleich sechs Stunden Arbeit vernichteten würdest. (Und wenn du mit Peer-Reviews statt mit Pair-Programming arbeitest, geht es mit kleineren Patches erheblich schneller voran.)
  • Lerne die Tastaturkürzel deine Entwicklungsumgebung kennen und richte dir Code-Templates ein.
  • Dein Gemütszustand beeinflusst deine Wahrnehmung, dein Gedächtnis, deine Konzentration und dein logisches Denkvermögen. Wenn du wütend oder sehr genervt bist, dann investiere zuerst Zeit darein, dass es dir wieder besser geht, damit du danach produktiv sein kannst.
  • Vermeide möglichst Stress. Bei anspruchsvollen geistigen Tätigkeiten ist bei einer entspannten Herangehensweise die Produktivität am höchsten, während bei Routinetätigkeiten bei leichtem Stress die Produktivität am höchsten ist. Außerdem macht Stress krank, und Krankheitsausfälle reduzieren deine Produktivität extrem.
  • Mache Pausen, damit du neue Energien sammeln kannst: Strecke dich zwischendurch. Schlafe genug. Erlege dir am Wochenende (mindestens) einen Tag Arbeitsverbot auf. Mache Urlaub.
  • Behandle dich gut. Dein Körper ist dein wertvollstes Gut, und alle geistigen Tätigkeiten sind genau genommen körperliche Vorgänge (so mit Hormonen, elektrischem Strom und so).
  • Du bist nicht immer gleich produktiv: An manchen Tagen kommst du besser voran, an anderen weniger. Das geht allen so, ist nicht zu vermeiden und absolut okay.

Die meisten Sachen dieser Liste sind übrigens nicht auf meinem eigenem Mist gewachsen, sondern ich habe sie aus diversen Büchern zusammengesammelt.

Oliver @ 23:50 | Permalink | 0 comments/Kommentare

|

Good people

Good Software

Archive