Grundlegende Funktionen und Einstellungen des Terminals

written by Martin HĂ€cker on

Der Terminal-Emulator ist ein zentrales Werkzeug, mit dem wir Entwickler mit unseren Rechnern interagieren. Jedes bisschen Wissen und jede Effizienz, die du hier gewinnst, zahlt sich in kĂŒrzester Zeit hundertfach aus.

NatĂŒrlich gibt es viele Terminals, wie iTerm2, Alacritty oder Kitty. Aber ich finde, diese solltest du nur verwenden, wenn sie deinen Workflow wirklich verbessern. Und dafĂŒr musst du zuerst wissen, was Apple standardmĂ€ĂŸig mitliefert.

Das Schöne am Terminal ist, dass du unglaublich wenig anpassen musst, da es von Haus aus sehr gut funktioniert.

Ich nutze das eingebaute Terminal von macOS mit nur zwei (!) Konfigurationsanpassungen.

Wortweise Löschen

Wortweise Löschen

Die erste wirklich wichtige Anpassung fĂŒr mich ist, dass ⌄-⌫ (Alt-Delete) als Standard-Keybinding gesetzt wird, damit wortweise nach links gelöscht wird. Damit passt du das Terminal an den Mac-Standard an, der in fast allen anderen Programmen ebenfalls funktioniert.

So geht's:

  1. Terminal → Einstellungen öffnen (⌘-,).
  2. Auf der linken Seite alle Profile auswÀhlen, damit alle Einstellungen gleichzeitig bearbeitet werden.
  3. Auf der rechten Seite → "Tastatur" auswĂ€hlen.
  4. Einen neuen Shortcut hinzufĂŒgen.
  5. Die Felder wie im Screenshot ausfĂŒllen. \027 steht fĂŒr ⌃-w (ctrl-w), den Standard-Shortcut fĂŒr wortweises Löschen in der Shell.

Ausgabe navigieren, selektieren und löschen

Die nÀchst-wichtigsten Shortcuts sind:

  • ⌘-N / ⌘-T / ⌘-W: Alles Standard, aber trotzdem meine meistbenutzten Shortcuts.
  • ⌘-↑ und ⌘-↓: Zum Anfang des vorherigen bzw. nĂ€chsten ausgefĂŒhrten Befehls springen. Das ist super praktisch, um schnell nachzusehen, was die vorherigen Kommandos waren.
  • ⌘-Shift-↑ und ⌘-Shift-↓: Wie oben, aber selektiert zusĂ€tzlich. Damit kannst du schnell einen Befehl und dessen Ausgabe kopieren. Das ist super praktisch, um Anleitungen zu schreiben oder einem Kollegen zu zeigen, wie etwas gemacht wurde.
  • ⌘-L: Löscht nur die Ausgabe des letzten Kommandos. Sehr praktisch, um ein nicht mehr benötigtes Shell-Experiment zu entfernen – besonders bei Fehlern mit viel Output. Oft nutze ich das, wenn ich zuerst eine Hilfe anzeige und dann darunter verschiedene Experimente ausfĂŒhre, um die richtigen Flags zu finden. (Genauer: ⌘-L löscht vom Ende bis zur aktuellen Selektion und funktioniert daher hervorragend mit ⌘-↑.)
  • ⌘-K: Terminal löschen. Die nukleare Option – sie löscht alles im aktuellen Terminal. Großer Nachteil: Was weg ist, ist weg. Also nicht benutzen, wenn du den Output noch brauchst. Dennoch ist dies einer meiner am hĂ€ufigsten benutzten Shortcuts.

Unbegrenzter Puffer

Unbegrenzter Puffer

Die zweite Anpassung, die ich vornehme, ist, den Scrollback-Puffer auf unbegrenzt zu stellen, damit ich die Ausgabe von langen Kommandos nicht verliere. Das geht so:

  1. Terminal → Einstellungen öffnen (⌘-,).
  2. Wie zuvor alle Profile auswÀhlen.
  3. Auf der rechten Seite → "Fenster" → "Zeilenpuffer" auf „auf den verfĂŒgbaren Speicher begrenzen“ stellen.

Fazit

Mit diesen Shortcuts kannst du ultraschnell zwischen den letzten Kommandos navigieren, deren Ausgabe selektieren (und kopieren) oder löschen.

Diese Anpassungen und Shortcuts sind fĂŒr mich auch einer der HauptgrĂŒnde, warum ich die eingebauten Terminals in IDEs nicht gerne benutze. Denn dort funktionieren sie oftmals nicht gut.

Viele dieser Einstellungen und Shortcuts gibt es auch auf der Ebene der Shell. Der Vorteil, sie ĂŒber das Terminal zu konfigurieren, ist, dass diese Shortcuts auch auf anderen Servern oder in Docker- bzw. Kubernetes-Containern funktionieren.

Ich hoffe, diese Tipps helfen dir, das Terminal noch besser zu nutzen.

Kennst du weitere nĂŒtzliche Shortcuts oder Einstellungen, die ich nicht erwĂ€hnt habe? Hast du Fragen zu den vorgestellten Tipps? Lass es mich wissen!

Happy Shelling!

Wie kann KI beim Lernen mit Blooms-Taxonomie unterstĂŒtzen?

written by Martin HĂ€cker on

Blooms Taxonomie

Nachem ich jetzt lange ĂŒber Blooms Taxonomie und was die Ebenen im Detail bedeuten geschrieben habe, kann ich jetzt endlich zu dem kommen, was mir eigentlich am Herzen liegt:

Mein ganzes Leben lang haben andere die Ebenen von Blooms Taxonomie verwendet um zu beurteilen wie gut ich etwas verstanden habe - aber man kann diesen Spieß auch umdrehen, und das wissen um diese Ebenen des VerstĂ€ndnisses nutzen um selbst besser zu lernen! (Ehrlich gesagt, bin ich ziemlich angepisst das mir das nicht von Vorne herein genau dafĂŒr erklĂ€rt und beigebracht wurde)

Wie funktioniert das? Wenn Mensch ohne Plan lernt, dann neigen wir dazu uns zunÀchst auf den unteren Ebenen zu bewegen. Denn das ist (vermeintlich) einfacher und erscheint logisch. Aber aus der Forschung wissen wir, dass sich von vorne herein auf Fragen der 4. und 5. Ebene (also Analysieren und Bewerten) zu konzentrieren, nicht nur schneller, sondern auch tieferes VerstÀndnis bringt.

Warum? Weil sich die Art und Weise verĂ€ndert mit der wir uns mit dem Lern-Material beschĂ€ftigen. Auswendig Lernen ist ja nicht verzichtbar. Man muss sich die Fakten ja merken. Aber das passiert auch, wenn man sie Analysiert und Bewertet - ABER - wir kriegen die Analyse und Bewertung gratis dazu. (Wohlgemerkt, fĂŒr etwas mehr Kognitive Anstrengung, aber Entspannung ist ja nicht das Ziel.)

Und das ist der Clou. Gleicher Zeiteinsatz, aber tieferes VerstÀndnis.

đŸ€Ż

Jetzt ist natĂŒrlich nicht jeder mit der FĂ€higkeit geboren, sich selbst einfach so Fragen auf der 4. und 5. Ebene zu stellen. Aber das ist auch gar nicht nötig. Denn KI kann dabei prima helfen.

Chat-GPT hat ein sehr gutes VerstÀndnis von Blooms-Modell und kann endlos fragen auf Bloom Level 4 und 5 zu jedem Thema generieren. Die sind nicht immer perfekt, es reicht aber, um sich darauf einzustimmnen wie solche Fragen aussehen und effizient selbst zu solchen Fragen zu kommen.

Und das ist fĂŒr mich ein gamechanger, und super sinnvoller Einsatz von KI.

Hier mal ein Auszug aus einem Chat mit Chat-GPT. Das ist sicher nicht perfekt, aber ein starker Anfang. Chapeau, Chat-GPT!

Was ist blooms taxonomie? Die 'wichtigsten' oberen Ebenen

written by Martin HĂ€cker on

Blooms Taxonomie

In meinem ersten Blog-Post habe ich mich mit Blooms Taxonomie beschĂ€ftigt. Im zweiten ging es um die ersten drei Ebenen seines Lernmodells. Hier geht es jetzt um die mir am wichtigsten ebenen vier und fĂŒnf. Und der VollstĂ€ndigkeit halber auch auch um die sechste.

Und los gehts!

Die Ebenen von Blooms Taxonomie:

4. Analyse

Auf dieser Ebene geht es darum, Wissen und Informationen in seine Bestandteile zu zerlegen um Beziehungen und Strukturen zu erkennen und Verstehen. Hier geht es erstmals um kritisches Denken und das erkennen von Mustern.

Fragen: "Welche Elemente bilden das Gesamtkonzept?" oder "Wie hÀngen die Teile zusammen?" und "Was sind die zugrunde liegenden Annahmen?" Diese Fragen helfen uns, tiefer in das Thema einzutauchen und es aus verschiedenen Perspektiven zu betrachten.

TĂ€tigkeit: Untersuchen, Zerlegen, Beziehungen erkennen, Vergleichen. Hier geht es darum, das erlernte Wissen zu analysieren, zu hinterfragen und mit schon gelerntem aus anderen Themen zu vergleichen und zu kontrastieren.

Die FĂ€higkeit, komplexe Informationen zu durchdringen und logische Verbindungen herzustellen.

Lernziel: Ich kann komplexe Informationen durchdringen, zerlegen und logische Beziehungen erkennen. Auch zu anderem bisher gelernten. Das Ergebnis dieser Lernstufe ist die FĂ€higkeit, das Gelernte zu analysieren und zu hinterfragen.

Daher ist diese Ebene und Ihre Fragestellung auch mit der nĂ€chsten so wichtig, um langfristig zu behalten was man gelernt hat (verknĂŒpfungen und kontrastierung zu anderem was man schon kann). Außerdem: Wenn man sich von Anfang an mit diesen Fragen beschĂ€ftigt, kriegt man in der gleichen Lernzeit Ebene 1-3 quasi umsonst.

Beispiel: Ein Softwareentwickler könnte beispielsweise den Code eines Programms analysieren, um Fehler zu finden oder um zu verstehen, wie verschiedene Teile des Codes zusammenarbeiten. In einem Konflikt könnte ich die Argumente analysieren, um Bestandteile, Beziehungen zwischen den Argumenten und die dahinter stehenden Annahmen, deren Logik, und die historische Beziehung der konflikteten Parteien zu bewerten.

5. Evaluieren

Jetzt, wo wir das Wissen analysiert und zerlegt haben, geht es darum, dieses Wissen zu bewerten, zu kritisieren und zu priorisieren. Es geht darum, fundierte Urteile zu fĂ€llen und Kritik zu ĂŒben.

Fragen: "Ist diese These Valide?", "Wie effektiv ist diese Methode?", "Welche vor und Nachteile hat dieser Ansatz?", "Welcher andere Ansatz ist aus welchen GrĂŒnden besser?" oder "Welche Methode sollte ich priorisieren?" Diese Fragen helfen uns, das Wissen zu bewerten und Entscheidungen zu treffen.

Lernziel: Das Ergebnis dieser Lernstufe ist die FĂ€higkeit, das Gelernte kritisch anhand der fĂŒr meine Situation relevanten Kriterien zu bewerten und Entscheidungen zu treffen. Es geht darum, das Wissen zu nutzen, um fundierte Entscheidungen zu treffen und PrioritĂ€ten zu setzen.

TĂ€tigkeit: FĂŒhren von Debatten, Entscheidung zwischen AnsĂ€tzen, Bewerten von Projekten und Theorien. Hier geht es darum, das erlernte Wissen zu bewerten und zu priorisieren.

Beispiel: In einem Projekt oder bei der Softwareentwicklung verschiedene Strategien oder Umsetzungsmöglichkeiten bewerten und entscheiden, welche am besten umgesetzt werden sollte. Oder auch kleiner: Bewertung der GlaubwĂŒrdigkeit einer Quelle. Kritisches hinterfragen von Maßnahmen und (politischen) Entscheidungen.

6. Erzeugen

Einleitung: Die höchste Ebene ist das Erschaffen, bei dem ein neues oder originelles Werk entwickelt wird. Es geht darum, Wissen und Ideen auf innovative Weise zu kombinieren und neue Konzepte zu entwickeln.

Fragen: "Was wÀre, wenn...?" oder "Wie könnte ich...?". "Könnte ich [Problem X] vielleicht auch ganz anders angehen?", "Kann ich diese Konzepte vielleicht auch so kombinieren?"

Lernziel: Kreativit und Innovativ eigene Ideen in Produkte umsetzen.

TĂ€tigkeit: Entwickeln von Projekten oder Modellen. Schreiben von Texten. Entwerfen von Experimenten oder Prototypen.

Beispiel: Als Softwareentwickler entwickle ich eine Software. Ich schreibe ein Gedicht. Ich fĂŒhre eine neue Software ein um ein altes Problem neu besser zu lösen.

Warum ist mir das so wichtig?

Seit den 1960er Jahren wird Blooms Taxonomie dazu verwendet, um einzuschĂ€tzen, wie gut ich und andere ein Thema verstanden haben. Und erst jetzt kriege ich raus, dass es a) existiert, und ich es b) dazu verwenden kann mein eigenes Lernen besser zu verstehen und zu vertiefen? Boah ey, wieso hat mir das in der Schule niemand erklĂ€rt? Oder wenn, wieso dann nicht auf eine Weise die ich verstanden habe? Ich fĂŒhle mich im Moment so, als wurde mir hier ĂŒber Jahre etwas wichtiges vorenthalten.

So, das wars. Jetzt wisst Ihr so viel ĂŒber das Modell und seine Ebenen wie ich auch. NĂ€chstes mal soll es dann darum gehen wie man mit hilfe von KI sich selbst auf die Ebene des Lernens Katapultieren kann auf der man gerade sein will.

Bis dahin, bleibt neugierig und probiert es doch mal aus in diesen Kategorien ĂŒber euer eigenes Lernen nachzudenken.

Was ist blooms taxonomie? Die ersten Ebenen

written by Martin HĂ€cker on

Blooms Taxonomie

In meinem letzten Blog-Post habe ich mich mit Blooms Taxonomie beschĂ€ftigt. Mir hat dieses Modell viele GedankenanstĂ¶ĂŸe darĂŒber gegeben, wie ich lerne. Ich habe die sechs Ebenen von Blooms Taxonomie vorgestellt und ihre Anwendung sehr knapp diskutiert. Heute möchte ich diese Ebenen vertiefen und anhand von Beispielen auf die Unterschiede zwischen den Ebenen eingehen sowie die jeweiligen Lernziele beleuchten. Mein Ziel ist es, mir und anderen, die Anwendung von Blooms Taxonomie in beim Lernen zu veranschaulichen. Los gehts!

Die Ebenen von Blooms Taxonomie:

1. Wissen

Die Grundlage fĂŒr alles. Hier geht es darum, sich an Fakten und Informationen zu erinnern. (Wer hĂ€tte das gedacht? ;)

Fragen: "Was sind die Fakten?" oder "Was weiß ich ĂŒber dieses Thema?"

TĂ€tigkeit: Sich was merken. Hier helfen z.B. GedĂ€chtnis-Tricks wie ein GedĂ€chtnispalast, aber meine Empfehlung ist ein durchsuchbares Notizbuch als externalisiertes GedĂ€chtnis zu fĂŒhren. Warum? Weil das wunderbar fĂŒr alle weiterne Ebenen verwendbar ist. :) Ich verwende derzeit Agenda, aber wenn ich jetzt neu anfangen wĂŒrde, wĂŒrde ich Logseq verwenden.

Lernziel: Ich kann dieses Wissen wiedergeben. Wenn Du aber nur auf dieser Ebene lernst, dann geht es Dir wie mir nach den Klausuren - eine Woche SpÀter hatte ich das meiste erfolgreich wieder vergessen. :)

Beispiel: Welche Module und Funktionen gibt es grob in der Standardbibliothek meiner Programmiersprache? Oder: Welche Themen muss ich fĂŒr die Klausur kennen? Welche Punkte hat jedes Unterthema?

2. VerstÀndnis

Aufbauend auf Wissen, geht es jetzt darum Informationen zu interpretieren, zu erklÀren und erste ZusammenhÀnge herzustellen.

Es reicht nicht mehr aus, nur Fakten zu kennen, sondern es ist wichtig, ihre Bedeutung zu verstehen und sie in einen Kontext einzuordnen.

Fragen: "Kann ich das Gelernte in eigenen Worten erklĂ€ren?" oder "Kann ich ein Beispiel fĂŒr das Gelernte geben?" Damit kann ich das Gelernte verstehen und in einen Kontext einordnen.

TÀtigkeit: Interpretieren, ErklÀren, In eigenen Worten wiedergeben, Zusammenfassen, mit schon gelerntem Vergleichen, Beispiele geben.

Lernziel: Ich kann das gelernte jemand anderem erklÀren. (Also unter andere dass, was ich hier gerade mache). Damit kriege ich selbst ein viel tieferes VerstÀndnis der Materie, und vergesse es auch viel weniger. Hier greift die alte Volksweisheit: Wer lehrt, lernt zweimal.

Beispiel: vor einer Klausur einen guten und vollstĂ€ndigen Spickzettel zu schreiben ist super. Überraschung: den braucht man in der Klausur dann ĂŒblicherweise nicht. :) Warum hilft das? Weil man hier strukturiert die (Lern)-Notizen zusammenfasst. Gerne als Mind-Map oder als Info-Graphik. Optimal: In einer Lern-Gruppe oder einem Kollegen etwas erklĂ€ren.

3. Anwendung

Mit dem VerstĂ€ndnis an der Hand, geht es jetzt darum Wissen in die Praxis zu ĂŒbersetzen. Gefordert sind (noch) keine großen Übertragungsleistungen, sondern eine direkte Anwendung des Gelernten in bekannten Kontexten.

Fragen: "Wie kann ich das Gelernte in einer bestimmten Situation oder bei einer bestimmten Aufgabe anwenden?" oder "Welche Probleme kann ich mit diesem wissen lösen?" Es geht darum das Gelernt auf bekannte Probleme anzuwenden.

TĂ€tigkeit: Anwenden, AusfĂŒhren, DurchfĂŒhren. Hilft alles nichts, man muss es mal praktisch in bekannten und neuen Situationen anwenden.

Lernziel: Ich kann das Gelernte in Ă€hnlichen Kontexten anwenden. Das Ergebnis dieser Lernstufe ist die FĂ€higkeit, einfache Problemlösungen durchzufĂŒhren. Es geht darum, das Gelernte in die Praxis umzusetzen und zu zeigen, dass man das Wissen nicht nur besitzt, sondern auch anwenden kann.

Beispiel: Ein Programmierer könnte eine Aufgabe aus Advent Of Code lösen um das dahinter liegende Konzept zu verstehen. Ein Administrator nach einer Schulung die Sicherheitseinstellungen eines Netzwerk PrĂŒfen und verbessern. Ein Agiler Team-Teilnehmer ein neu gelerntes Projekt-Management Werkzeug in einem agilen Experiment ausprobieren.

Fazit

Beim Schreiben ist mir aufgefallen wie schwer es ist diese Ebenen kurz und Knapp vorzustellen. Es gibt ja noch drei weitere Ebenen, aber ich wollte eure geschÀtzte Aufmerksamkeit nicht noch weiter QuÀlen. :)

Daher habe ich hier abgetrennt. Diese ersten Ebenen sind zwar essenziell um zu verstehen wie das alles gemeint ist. Aber den eigentlichen Schatz heben wir erst auf der 4. und 5. Ebene: Analyse und Evaluation. Und darum geht es (sicher fĂŒr den geehrten Leser völlig ĂŒberraschend) in meinem nĂ€chsten Blog Post. :)

WĂ€hrend dem lernen Lernen lernen - Blooms Taxonomie

written by Martin HĂ€cker on

Die Lernpyramide nach Bloom

Vor einigen Wochen bin ich ĂŒber ein wundervolles Youtube Video gestolpert, dass mich ĂŒber Blooms Taxonomie des Lernens informiert hat. Bloom stellt darin eine faszinierende Methode vor, mit der man sich Wissen ĂŒber ein Thema schnell und effektiv aneignen kann.

Das hat mich ein bisschen umgehauen, da ich in alle den Jahren in denen ich gelernt habe noch nie davon gehört hatte. Endlich ein brauchbares Modell, wieso manche meiner Lerngewohnheiten gut oder eben schlecht funktionieren. 

In kurz, Blooms Taxonomie ist ein Modell aus den 60' er Jahren, in dem er postuliert das es sechs Ebenen des Lernens gibt. Diese werden gerne als Pyramide visualisiert, was ich ungĂŒnstig finde → dazu gleich mehr.  

Die Pyramide fÀngt ganz unten (1) mit dem Auswendiglernen an. Dann lernt man (2) wie man Gelerntes erklÀrt. Dann (3) wendet man es direkt an. Dann lernt man (4) es mit anderem Wissen zu vergleichen. Dann es (5) gegen andere AnsÀtze zu priorisieren. An der Spitze der Pyramide (6) gewinnt man aus der Erfahrung aus der Anwendung, gewappnet mit den Analysen und Vergleichen, neue Erkenntnisse und Dokumentieren diese (zum Beispiel als Blog-Post).

Wenn man das sieht, erscheint es logisch, dass man diese Stufen brav der Reihe nach von unten nach oben durchlÀuft.

Und das ist der Clou - das ist genau falsch.

Stattdessen ist es viel schlauer, sofort mit dem Analysieren und Evaluieren anzufangen (Level 4 und 5).

Ja, das ist Anstrengender,  aber man kriegt damit die ersten drei Ebenen geschenkt, denn es passiert automatisch wenn man sich selbst mit den Fragen der Ebene 4 und 5 herausfordert.

Dazu kann mann jetzt auch noch Vergleichen wie sich das neue Wissen in das bereits gelernte einordnet, und BegrĂŒnden, in welchem Kontext welcher der AnsĂ€tze die man kennt besser funktionieren.

Also: Versucht es mal! NĂ€chstes mal gehe ich noch mal tiefer darauf ein was die einzelnen Ebenen ausmacht und danach, wie man KI dafĂŒr verwenden kann sich selbst beim lernen sofort auf Ebene vier und fĂŒnf zu katapultieren! 

rich und objexplore um Python code interaktiv zu verstehen

written by Martin HĂ€cker on

Da ich sie selber nicht so soft benötige und dann immer vergesse wie sie heißen hier als Notiz an mich selbst:

  • rich.inspect() ist super hilfreich um zu einem Objekt das man im Debugger vor Sich hat schnell eine Übersicht zu generieren was es kann und welche Daten es hat.
  • objexplore.explore() baut auf rich auf und bietet einen interaktiven explorer mit im wesentlichen den gleichen Informationen.

Beide Tools sind super hilfreich, wenn man in einer (fremden) Code-Basis schnell einen ĂŒberblick kriegen will wie Objekte interagieren und zusammenarbeiten.

Wie nutze ich die Shell effektiv

written by Martin HĂ€cker on

HĂ€cker bei der Arbeit
 Bei meiner Arbeit ist mir aufgefallen, dass viele Entwickler bei uns die Shell viel effektiver nutzen könnten, um ihre Arbeit besser und schneller zu machen. Da ich die Shell sehr viel nutze, habe ich dazu ein paar Ideen. 😇 Auf der anderen Seite gibt es immer wieder ein Nugget, das ich selbst nicht kenne – und das möchte ich natĂŒrlich auch lernen.  

In diesem Sinne: Ich freue mich ĂŒber Tips, lasst uns gerne daraus einen Austausch machen, wie man seine Shell effektiv einsetzt.

Damit verstĂ€ndlich wird wie ich meine Shell verwende ist es wichtig zu verstehen dass es verschiedene Arten gibt einen Mac effektiv zu nutzen. Ich kategorisiere das fĂŒr mich grob so:

  • Fensterbasiert: Viele Fenster, oft klein, die sich gegenseitig teilweise verdecken. Spezialisierte Apps anstatt Monolithen. Terminal, Editor, Git GUI, Datenbank-GUI und ein Dokumentationsbrowser, anstatt einer IDE die alles inkludiert.
  • Screen/Tmux Style: Auch viele Fenster, aber ohne das diese sich ĂŒberlappen. Viel Full-Screen und oft ein Window Manger oder Terminal das sicherstellt das Fenster garantiert nebeneinander sind. IDEs arbeiten in der Regel so.
  • Quake Shell-Style: Im wesentlichen irgend ein anderer Stil, aber mit einem globalen Shortcut, der jederzeit eine Shell in den Vordergrund bringt oder wieder verschwinden lĂ€sst - egal wo man gerade ist.
  • Mehrere Desktops: Separation von Apps ĂŒber mehrere Desktops oder Workspaces.

Ich bin ganz klar tief in dem Fensterbasierten Workflow verortet. Ich kenne natĂŒrlich auch die anderen Workflows, aber sie funktionieren fĂŒr mich persönlich einfach nicht so gut. Ich finde ĂŒberlappende Fenster wirklich großartig, weil ich damit auf einem sehr viel kleineren Bildschirm (14-Zoll-Notebook) genauso produktiv sein kann, wie auf einem sehr viel grĂ¶ĂŸeren Bildschirm. 

Ich hoffe sehr, dass die Apple-Vision bald so gut funktioniert und so leicht wird, wie ich es mir wĂŒnsche. Dann kann ich es mir meine Fenster fei um mich herum anordnen. Aber bis dahin bleibe ich bei ĂŒberlappenden Fenstern.

Chestertons Fence oder was ist Denken zweiter Ordnung?

written by Martin HĂ€cker on

Mir hat dieser Artikel ĂŒber das Denken zweiter Ordnung sehr gut gefallen.

Einsam stehendes Auto vor einem Zaun ĂŒber eine Straße

Er erklĂ€rt am Beispiel von 'Chestertons-Fence', warum es wichtig ist, vor Änderungen an Systemen das Denken zweiter Ordnung einzusetzen. Er nutzt dazu die Methapher eines Zauns ĂŒber eine Straße. Diesen sollte man nicht einfach wegrĂ€umen, nur weil er nervt. Warum? Weil die Menschen die ihn gebaut haben hatten damit Aufwand, den Sie nicht einfach nur so zum Spaß investiert haben. Deren GrĂŒnde muss man verstehen um zu sehen ob der Zaun tatsĂ€chich weg kann, oder nach wie vor nötig ist.

Angenommen hinter dem Zaun befindet sich ein Straßenabschnitt, der mit Minen verseucht ist. Leider ist dies in der Ukraine ja ein hĂ€ufiges Problem. Der Zaun sollte erst entfernt werden, wenn die Minen gerĂ€umt sind, um TodesfĂ€lle und Verletzungen zu vermeiden. Die Toten und Verletzten sind hier der Effekt zweiter Ordnung.

Denken zweiter Ordnung heißt also nicht nur zu hinterfragen, warum etwas so ist, wie es ist, sondern auch zu verstehen, warum die Menschen, die es geschaffen haben (in unserem Fall meistens Code), es auf diese Weise gebaut haben. Bevor ich Änderungen vornehme, sollte ich mir Zeit nehmen, um die GrĂŒnde fĂŒr die ursprĂŒngliche Gestaltung zu verstehen, da unbedachte Änderungen unerwĂŒnschte Effekte haben werden.

So zu denken finde ich nicht leicht. Oft misslingt es mir. Aber es ist fĂŒr mich ein Ziel.

Was heißt das fĂŒr uns Entwickler?

Besonders bei der Frage: Wieso sind unsere Systeme so wie sie sind? Ist das fĂŒr mich super relevant. Aber auch immer wenn ich Programmiere. Wenn ich einen Zaun aufstelle, also z.B. etwas komplizierter mache als es sein könnte, dann schreibe ich einen Kommentar wieso ich mich gegen die einfachere Lösung entschieden habe, damit die nach mir kommenden verstehen ob meine - fĂŒr Sie - ĂŒberkomplizierte Lösung noch nötig ist. Wenn ich eine weiter reichende Entscheidung fĂ€lle, dann Dokumentiere ich diese gerne mit eineme Architektural Decision Record (ADR) der enthĂ€llt aus welchen GrĂŒnden wir uns so entschieden haben. Wenn ich eine Story schreibe, dann muss da nicht nur das Feature drauf, sondern eben auch der Grund dafĂŒr, damit ich oder andere spĂ€ter nachvollzieen können, wieso dieses Feature existiert, oder eben wieso es nicht mehr nötig ist. Idealerweise wĂŒrde ich auch gerne vom Code ĂŒber die Commits zur Story zurĂŒck kommen - aber das gelingt mir bisher regelmĂ€ĂŸig nicht.

Fazit

Viele der Praktiken, die wir in der Softwareentwicklung als Standards ansehen, dienen eigentlich dazu, das Denken zweiter Ordnung zu erleichtern – ein wichtiger Zusammenhang, der oft unerwĂ€hnt bleibt, mir aber zunehmend klarer wird.

Ganz besonders wichtig ist mir aber der Respekt, im Zweifel sollte ich erst einmal annehmen das der andere sich etwas dabei gedacht hat. Bevor ich das nicht verstehe sollte ich nicht die Axt ansetzen.

Heimautomatisierung mit Tradfri, Hue und HomeKit - und e-MĂŒll vermeiden

written by Martin HĂ€cker on

Zu meinen Ikea TrĂ„dfri Leuchten habe ich mir jetzt einen Phillips Hue LED-Streifen dazu geholt. Letztlich aus drei GrĂŒnden:

  • Weil die viel Heller sind als fast alle Konkurrenzprodukte
  • Weil sie auch ZigBee verwendet und damit nahtlos in meine Ikea TrĂ„dfri infrastruktur passt (theoretisch
)
  • Weil ich mir die Ikea Bridge sehr bewusst ausgesucht habe, weil sie eben ohne einen Cloud zwang daher kommt.
  • Weil ich sie in einem Sonderangebot 3 Meter fĂŒr 50 € bekommen habe.

Well, also der Klebestreifen auf der LED-Schlange verdient diesen Namen schon mal nicht. Nicht nur das man den in 10 cm Inkrementen abpulen musste, er klebt zwar prima an der Tapete - aber nicht am LED-Streifen. WTF?

Davon abgesehen ist er super hell und lĂ€sst sich ĂŒber Tradfri gut anbinden und steuern. ABER: Tradfri pusht ihn NICHT nach HomeKit wie es das mit den anderne Ikea eigenen Produkten macht. đŸ˜ŁđŸ’©đŸ˜ŁđŸ’©đŸ˜ŁđŸ€Ź

Software Updates spielt die Tradfri Basis auch nicht ein - aber ok, das kriege ich via Bluetooth hin, was der LED-Streifen auch noch kann.

Jetzt extra noch eine Hue Bridge zu kaufen, nur damit ich dieses eine GerÀt auch in HomeKit schalten kann, sehe ich jedenfalls mal gar nicht ein. Also hab ich mein trusty schweizer Messer Python ausgepackt und mit etwas Code nachgeholfen das fehlenden Device von TrÄdfri nach HomeKit zu pushen. Et Voila. :-)

Fazit: Die Schaltzeiten leiden etwas, Kann durchaus auch mal eine Sekunde dauern, anstatt der fast instantanen schaltzeit der Lampen die direkt ĂŒber die Tradfri Bridge gehen. Aber wurscht, keine extra Bridge, etwas Spaß mit Python und die Erfahrung das es leicht geht da beliebigen eigenen Code einzubinden, der z.B. schöne Hintergrund-Farbwechsel ambient Lights produziert.

Elon Musks Design Philosophie

written by Martin HĂ€cker on

Beim lesen dieses Interview mit Elon Musk (hier auch als Video) hatte ich wirklich Spaß.

Diese Dinge sind nichts neues - aber mir ist klar geworden dass ich in der Vergangenheit viel zu Wenig wert darauf gelegt habe Requirements als Dumm zu identifizieren und Los zu werden, sowie Prozesse zu löschen. Autsch. Mea Culpa - ich gelobe Besserung.

Hier vor allem fĂŒr mich selbst archiviert:

Musk’s Engineering Philosophy:

Musk overviewed his five step engineering process, which must be completed in order:

  1. Make the requirements less dumb. The requirements are definitely dumb; it does not matter who gave them to you. He notes that it’s particularly dangerous if someone who is smart gives them the requirements, as one may not question the requirements enough. “Everyone’s wrong. No matter who you are, everyone is wrong some of the time.” He further notes that “all designs are wrong, it’s just a matter of how wrong.”
  2. Try very hard to delete the part or process. If parts are not being added back into the design at least 10% of the time, not enough parts are being deleted. Musk noted that the bias tends to be very strongly toward “let’s add this part or process step in case we need it.” Additionally, each required part and process must come from a name, not a department, as a department cannot be asked why a requirement exists, but a person can.
  3. Simplify and optimize the design. This is step three as the most common error of a smart engineer is to optimize something that should not exist.
  4. Accelerate cycle time. Musk states “you’re moving too slowly, go faster! But don’t go faster until you’ve worked on the other three things first.”
  5. Automate. An important part of this is to remove in-process testing after the problems have been diagnosed; if a product is reaching the end of a production line with a high acceptance rate, there is no need for in-process testing. Additionally, Musk restated that he believes everyone should be a chief engineer. Engineers need to understand the system at a high level to understand when they are making a bad optimization. As an example, Musk noted that an order of magnitude more time has been spent reducing engine mass than reducing residual propellant, despite both being equally as important.