Wie man eine Programmieraufgabe versteht

Der Tag ist endlich da. Ist es Ihr erster Arbeitstag oder machen Sie das seit zehn Jahren? Es spielt keine Rolle. Wir alle stehen schließlich vor einer Aufgabe, die wir einfach nicht verstehen.

Was solltest du also tun? Sollten Sie einfach anfangen und hoffen, dass es funktioniert? Sollten Sie Ihrem Chef sofort sagen, dass Sie dies nicht tun können, weil Sie es nicht verstehen?

Ich stelle mir vor, dass Sie wissen, dass die Antwort weder ist!

Wie bei jedem anderen Beruf habe ich beim Programmieren festgestellt, dass es fast unmöglich ist, eine Woche (und manchmal nicht einmal einen Tag) zu durchlaufen, ohne ein Problem zu finden, das ich nicht verstehe.

Aber ärgere dich nicht! Ich habe tolle Neuigkeiten. Sie können dieses Problem nicht nur beheben, sondern es kann auch eine gute Sache sein.

Es bedeutet, dass Sie in gewisser Weise Ihre Fähigkeiten und Kenntnisse über das hinaus erweitern, was Sie zuvor getan und gewusst haben.

In den nächsten Absätzen werde ich detailliert beschreiben, wie Sie die Lücke zwischen den Anforderungen, die Ihnen übergeben wurden, und dem Wissen, das Sie zur Erfüllung der Ihnen übertragenen Aufgabe benötigen, schließen können.

Über "Anforderungen"

Sie haben vielleicht bemerkt, dass ich das Wort "Anforderungen" verwendet habe. Dieses Wort kann je nach Arbeitsort bestimmte Konnotationen haben.

Nach meiner Erfahrung lieben große Unternehmen Anforderungen und kleine Unternehmen „tun manchmal keine Anforderungen“. Ich denke, das ist für unsere Zwecke hier vollkommen in Ordnung.

Das liegt daran, dass wir als Softwareentwickler letztendlich nur Probleme lösen.

Sie könnten einen ausführlichen einhundertseitigen Bericht über die Lösung dieses Problems erhalten (ich hatte einmal eine einstündige Besprechung über den Text für eine Schaltfläche). Oder vielleicht schlängelt sich Ihr CEO zu Ihrem Schreibtisch und fragt beiläufig, ob Sie das Problem bis Freitag lösen können.

So oder so - Sie haben eine Aufgabe erhalten und müssen sicher sein, dass Sie dieses Problem vollständig verstehen, um es richtig anzugehen!

Über die Schritte

Nicht alle der unten angegebenen Schritte sind für jedes Problem erforderlich. Nur bei den am schwersten zu verstehenden Problemen müssen Sie möglicherweise alle Schritte, die in diesem Artikel behandelt werden, sorgfältig ausführen.

Viele der Fragen können möglicherweise nicht aufgrund der von Ihnen gestellten Anforderungen oder aufgrund Ihrer persönlichen Erfahrung allein beantwortet werden.

Möglicherweise müssen Sie andere Entwickler, Ihren Teamleiter, Produktbesitzer, Geschäftsanalysten oder sogar Ihre Oma fragen. Vielleicht müssen Sie alle fragen, bis Sie fertig sind!

Das ist aber in Ordnung. Es bedeutet, dass Sie verstreutes Wissen nehmen und es verdichten, um an einem Ort zu wohnen. Dieser Ort ist in Ihnen selbst und jetzt können Sie das bestmögliche Ergebnis erzielen!

Eine letzte Warnung, bevor Sie die Schritte lernen: Formalisieren Sie diesen Prozess nicht zu stark. Hier geht es darum, Ihnen zu helfen, ein Problem schnell zu verstehen. Es sollte keine Barrieren oder Bürokratie schaffen! Stattdessen sollte es Ihnen einen systematischen Plan zur Lösung eines Problems liefern, das Sie nicht verstehen.

Der erste Schritt: Analyse der Aufgabe

In diesem Schritt versuchen Sie zu verstehen, worum Sie gebeten wurden. Sie versuchen noch nicht herauszufinden, wie es geht!

Die Unterscheidung hier ist wichtig. Es kann gefährlich sein, direkt in die Implementierung einzusteigen, ohne über alle Konsequenzen nachzudenken, oder schlimmer noch, ohne genau zu bestimmen, worum Sie gebeten wurden.

Klassifizieren Sie die Aufgabe

Um eine Aufgabe zu klassifizieren, müssen Sie bestimmen, welche Art von Arbeit Sie zur Lösung dieses Problems ausführen werden. Hier einige Beispiele für Arten von Aufgaben:

  • Bug-Fix
  • Neue Funktion
  • Neue Bewerbung
  • Forschungsauftrag
  • Leistungsverbesserung

Denken Sie daran, dass dies nicht alle möglichen Optionen sind.

Ziel ist es, festzustellen, welche Art von Arbeit von Ihnen erwartet wird. Dies ist wichtig, da es sich direkt auf Ihre Arbeit auswirkt .

Dieser Schritt ist besonders wichtig für vage Anforderungen. Ein Beispiel für eine vage Anforderung lautet: „Wir brauchen eine Möglichkeit, die Caches unserer Kunden nach einem Update der Website zu leeren.“

Es kann einige mögliche Interpretationen geben.

  1. Sie müssen sofort einen Cache-Löschmechanismus implementieren, damit Clients immer die neuesten Updates sehen.
  2. Sie müssen untersuchen, wie die Caches der Clients gespeichert werden, und nach jeder Aktualisierung der Website ermitteln, wie diese Caches am besten zerstört werden können.
  3. Die Caches der Clients sollten bereits gelöscht werden, und Sie müssen den Fehler finden und beheben, der das Löschen der Clients verhindert.

Wenn Sie zu diesem Zeitpunkt nicht sicher sind, welche Bedeutung verwendet wird, sollten Sie vor dem Fortfahren um Klärung bitten.

Geben Sie in ein oder zwei einfachen Sätzen an, um welche Aufgabe es sich handelt.

Fassen Sie die komplizierten Anforderungen so zusammen, als wären Sie gefragt worden, woran Sie heute arbeiten. Vielleicht ist es nicht so einfach, aber Sie sollten es auf ein oder zwei Sätze reduzieren können.

Wenn Sie die Aufgabe nicht zusammenfassen können, bedeutet dies wahrscheinlich, dass Sie sie in mehrere Aufgaben aufteilen müssen. Im Wesentlichen wird dieser Schritt zu einem Lackmustest, um festzustellen, ob Sie Ihre Aufgaben in ausreichend kleine Teile unterteilt haben.

Hier ein gutes Beispiel für eine Zusammenfassung: „Wenn wir die Site aktualisieren, fügen wir den Dateien eine eindeutige Nummer hinzu, damit der Browser weiß, dass der neueste Code verwendet werden muss.“

Diese Aufgabe besteht den Lackmus-Test für die Einfachheit und Sie müssen wahrscheinlich nicht mehrere Aufgaben erstellen.

Ein schlechtes Beispiel könnte folgendermaßen aussehen: Wenn wir die Site aktualisieren, fügen wir den Dateien eine eindeutige Nummer hinzu, damit der Browser weiß, dass er den neuesten Code verwenden muss. Wir müssen auch eine Nachricht an unser CDN senden, damit es weiß, dass es die Dateien aktualisieren muss. Auch für die IOS- und Android-Apps muss ein Update an den App Store gesendet werden. Ebenfalls…"

Dieser besteht den Test eindeutig nicht. Es gibt viel zu tun und es muss möglicherweise separat identifiziert und verfolgt werden.

Skizzieren Sie die Hauptteile

In welcher Form auch immer, die für Sie am bequemsten ist, sollten Sie jetzt eine Liste der wichtigsten Dinge erstellen, die getan werden müssen.

Dies sollten immer noch sehr einfache Zusammenfassungen der einzelnen Hauptschritte sein.

Dies sollte keine schrittweise Anleitung oder detaillierte Anleitung zur Behebung des Problems sein.

Denken Sie daran, dass Sie immer noch die Aufgabe analysieren, die Sie erhalten haben. Ich würde empfehlen, diese irgendwie aufzuschreiben. Ich persönlich nehme sie in meiner Notes App auf.

Unsere Caching-Aufgabe ist sehr einfach und benötigt möglicherweise keine Gliederung. In diesem Beispiel betrachten wir ein komplexeres Problem.

Unsere nächste Aufgabe ist eine neue Funktion: „Jedem Benutzer sollte eine gezielte Werbung für ein internes Produkt angezeigt werden. Diese Anzeige sollte auf der Grundlage der von uns gesammelten Daten auf ihre individuellen Bedürfnisse zugeschnitten sein. “

Um die Hauptteile zu skizzieren, müssen Sie klar darüber nachdenken, was jeder Teil der Anforderung von Ihnen verlangt.

  • Unsere aktuellen Anzeigen müssen so aufgeschlüsselt werden, dass sie mit einer bestimmten Benutzermetrik korrelieren können.
  • Unser Marketing-Team muss eine Möglichkeit haben, neue Anzeigen einem oder mehreren Benutzerdaten zuzuordnen (ohne Codierung!).
  • Das System muss Metriken über einen Benutzer aggregieren, die für unsere Werbung relevant sind.
  • Schließlich müssen Sie eine Art System erstellen, das eine Benutzer-ID empfängt und eine Werbung ausgibt.

Das Schöne an einer solchen Liste ist, dass sie verwendet werden kann, um schnell mit Ihrem Team oder Chef zu verifizieren! In diesem Beispiel haben Sie es vielleicht von Ihrem Teamleiter geleitet und er hat entschieden, dass es noch ein weiteres wichtiges Stück geben muss:

  • Nutzer sollten uns mitteilen können, wann sie bestimmte Anzeigen nicht mehr sehen möchten.

Denn wir wollen unsere geliebten User doch nicht ärgern! Indem wir uns die Zeit nehmen, nur ein paar Minuten über unsere Aufgabe nachzudenken, haben wir später Stunden oder Tage an Schmerzen gespart, indem wir eine wichtige Aufgabe identifiziert und geplant haben, bevor wir mit dem Codieren beginnen.

Bevor wir fortfahren, möchte ich auf eine mögliche Kritik eingehen, die Sie möglicherweise haben.

Sie denken vielleicht: „In einem ordnungsgemäßen Unternehmen ist dies die Art von Arbeit, die ausgeführt werden sollte, bevor die Anforderungen jemals den Entwickler erreichen.“ Ich stimme Ihnen definitiv zu!

Wir leben jedoch leider nicht in einer perfekten Welt. Manchmal sind die Anforderungen nicht immer vollständig ausgearbeitet, bevor sie an einen Entwickler gelangen. Dies bedeutet, dass wir alle unser Bestes geben müssen, um die Anforderungen vor Beginn der Entwicklung richtig zu bewerten.

Definieren Sie das Problem oder die Probleme, die Sie lösen möchten.

Beantworten Sie die Frage: "Warum wird jemand dies verwenden?" Oder "Welches tatsächliche oder wahrgenommene Problem in der realen Welt versuche ich zu beheben?"

Hoffentlich liegt die Antwort auf der Hand. In unserem Cache-Beispiel könnte man sagen: "Benutzer sehen immer die neuesten Updates." Für das Werbebeispiel werden "Nutzer relevante Anzeigen anstelle von Anzeigen sehen, die ihnen egal sind".

Wenn die Antwort nicht offensichtlich ist, ist es wahrscheinlich Zeit, jemanden zu fragen, warum Sie diese Aufgabe ausführen! Wenn Sie diese Frage stellen, haben Sie entweder ein klareres Verständnis für die anstehende Aufgabe, oder Sie überlegen, was Sie tun sollen.

Hoffentlich sehen Sie die Vorteile einer dieser Antworten! Ein tieferes Verständnis des Problems und des Zwecks ermöglicht es Ihnen, Entscheidungen in Ihrer Implementierung zu treffen, die tatsächlich den Geschäftszielen dienen. Durch das Erkennen von schlechten Lösungen oder Problemen, die keinen Sinn ergeben, wird unnötiger Arbeitsaufwand vermieden, der am Ende niemals ein Problem lösen würde.

Der zweite Schritt: Interpretation und Bewertung der Anforderungen

An diesem Punkt sollten Sie verstehen, was Sie tun werden und warum Sie es tun.

Ihr nächster Schritt wird darin bestehen, die Details zu verstehen, was Sie tun, wie Sie es tun sollen und warum Sie es so tun.

Klären Sie alle wichtigen Begriffe im Zusammenhang mit Ihrer Aufgabe.

Möglicherweise ist dieser Schritt wichtiger, wenn Sie ein neuer Entwickler in einem Team sind oder in einem großen Unternehmen arbeiten. In beiden Situationen ist es wahrscheinlicher, dass Sie in Ihren Anforderungen unbekannte Begriffe finden.

Begriffe können Geschäftsbegriffe sein, z. B. die Namen von Produkten, Kunden oder Prozessen. Dies können auch Entwicklungsbegriffe wie Namen von Tools, Anwendungen, Modellen, Diensten oder Bibliotheken sein.

Sie müssen sicher sein, alle wichtigen Begriffe ohne Unbestimmtheit zu verstehen, damit Sie sicher sein können, dass Sie Ihre Aufgabe korrekt ausführen.

Möglicherweise haben Sie Verständnis dafür, dass Sie eine Möglichkeit zum Zugriff auf die aggregierten Benutzerinformationen erstellen müssen. Verstehen Sie jedoch, was es bedeutet, diese dem „Dao“ hinzuzufügen?

Sie verstehen vielleicht, dass Sie die Werbedaten formatieren müssen, aber verstehen Sie, was der „MADF“ (Marking Advertising Data Feed) ist?

Ich auch nicht.

Deshalb müssen Sie alle wichtigen Begriffe identifizieren und definieren. Sie haben eine größere Wahrscheinlichkeit, die Aufgabe falsch zu implementieren, wenn Sie die Definitionen falsch verstehen.

Identifizieren Sie, wie die Aufgabe erledigt werden soll

An diesem Punkt sollten Sie nun überlegen, wie die Aufgabe erledigt werden soll. Dieser Schritt kann stark variieren, je nachdem, wo Sie arbeiten und welche Aufgabe Sie erhalten haben.

In einigen Teams wird Ihnen nicht gesagt, wie Sie Anforderungen implementieren sollen, sondern nur, mit welchen Funktionen Sie enden sollten.

Andere beschreiben jeden Schritt, den Sie unternehmen sollten.

Höchstwahrscheinlich liegt Ihre Erfahrung irgendwo in der Mitte.

Wenn Ihr Team Ihnen keine Anweisungen gegeben hat, können Sie bei diesem Schritt nicht viel tun. Wenn Sie Anweisungen erhalten haben, sollten Sie sich an dieser Stelle mit den erforderlichen Schritten vertraut machen.

Dieser Schritt scheint ziemlich offensichtlich zu sein, aber die Reihenfolge, in der er eingeht, sollten Sie besonders beachten.

Die natürliche Neigung kann darin bestehen, in alle Details der Aufgabe einzutauchen, bevor sichergestellt wird, dass der Zweck der Aufgabe verstanden wird.

Da Sie sich die Zeit genommen haben, Ihre Aufgabe zuerst zu verstehen, haben Sie jetzt ein klareres Ziel vor Augen, wenn Sie die Schritte bewerten, die Sie unternehmen müssen.

Stellen Sie fest, ob die Probleme gelöst wurden

Hier kommen die Analysephase und die Interpretationsphase zusammen. In der Analysephase haben Sie sich auf die Gesamtziele und -ergebnisse konzentriert, auf das Was und Warum .

Im Interpretationsschritt haben Sie sich auf die Details konzentriert, auf das Wie .

Der Grund, warum es Interpretation und Bewertung genannt wird, ist, dass Sie jetzt das Wie mit dem Was und dem Warum vergleichen. Sie interpretieren die Details, indem Sie das Gesamtbild betrachten. Sie bewerten die Details und stellen fest, ob das ursprüngliche Problem behoben wurde.

Fragen Sie sich: Werden die Schritte, die mir gegeben wurden, zu dem Ergebnis führen, das Ihre Aufgabe schaffen sollte? Wird dieses Ergebnis das ursprüngliche Problem tatsächlich lösen?

Wenn Sie sicher sind, dass alle Probleme gelöst sind und alle Details sinnvoll sind, können Sie mit Ihrer Arbeit beginnen! Andernfalls müssen Sie zur dritten Stufe übergehen, um Konflikte zu lösen.

Der dritte Schritt: Kritisch denken

Zu diesem Zeitpunkt sollten Sie sicher sein können, dass Sie das Problem und die Lösung verstehen. Der allerletzte Schritt besteht darin, sicherzustellen, dass Sie die richtige Lösung haben.

Um das bestmögliche Produkt zu schaffen, sollten wir alle das Gefühl haben, die Verantwortung zu haben, sich zu äußern, wenn etwas einfach keinen Sinn ergibt.

Auf der anderen Seite wollen wir nicht aus der Reihe widersprechen. Sie sollten nicht sagen, dass etwas nicht stimmt, weil es sich falsch anfühlt oder weil es mir nicht gefällt. Sie müssen konkrete und gut durchdachte Gründe haben.

Lassen Sie uns also einige Grundregeln für Meinungsverschiedenheiten festlegen.

Wissen, wann man anderer Meinung ist

  • Nicht widersprechen, bis Sie vollständig verstanden haben.

Sagen Sie niemals, dass etwas nicht stimmt, bis Sie absolut sicher sind, dass Sie verstehen, womit Sie nicht einverstanden sind.

Wenn Sie das Problem und die beabsichtigte Lösung nicht sicher angeben können, sollten Sie nicht anderer Meinung sein. Wenn Sie Ihr Verständnis nicht überprüft haben, sollten Sie nicht widersprechen. Nur wenn Sie wissen, dass Sie ein möglichst umfassendes Verständnis haben, sollten Sie anfangen, anderer Meinung zu sein.

Wenn Sie feststellen, dass Sie nicht über alle erforderlichen Informationen verfügen, ist es möglicherweise an der Zeit, einen der vorherigen Schritte anzuhalten und erneut zu überprüfen, bevor Sie jemandem mitteilen, dass die Anforderungen falsch sind.

  • Nicht uneinig über subjektive Angelegenheiten. Konzentrieren Sie sich auf tatsächliche potenzielle Probleme.

"Ich mag es nicht, wie das gemacht wird" ist subjektiv. "Dies führt aufgrund der Anzahl der beteiligten Vorgänge zu Leistungsproblemen." ist ein objektiver Grund. Andere Beispiele für subjektive Gründe könnten sein: "So habe ich es nicht anderswo gemacht" und "Ich hätte diese Lösung etwas anders entworfen, aber nur aufgrund persönlicher Vorlieben."

  • Halten Sie gut begründete Erklärungen Ihrer Meinungsverschiedenheiten bereit, um präsentiert zu werden.

Wenn Sie nicht erklären können, warum etwas nicht stimmt, können Sie dann wirklich sagen, dass Sie tatsächlich wissen, dass es falsch ist? Ich würde vorschlagen, die Gründe aufzuschreiben, warum etwas nicht stimmt und was getan werden kann, um es zu beheben.

Wenn Sie keine Lösung zur Behebung haben, geben Sie am Anfang deutlich an, dass Sie es nicht wissen.

Seien Sie vorsichtig, wenn Sie mit anderen nicht einverstanden sind. Der Großteil Ihrer Zeit sollte für das Verstehen und Zuhören aufgewendet werden, bevor Sie anderer Meinung sind.

Wenn Sie alle Schritte bis zu diesem Punkt befolgt haben, ist es sehr wahrscheinlich, dass Sie ein gutes Verständnis haben. Aber seien Sie sehr offen dafür, dass Sie etwas verpasst haben!

Ich beginne Gespräche gerne mit den Worten: "Ich bin nicht anderer Meinung als Sie, ich verstehe es einfach nicht." Später kommt die Meinungsverschiedenheit, wenn nötig, aber hoffentlich nie zuvor verstanden.

Wissen, wie man nicht zustimmt

Um sicherzustellen, dass wir objektiv nicht einverstanden sind, finden Sie hier einige Maßnahmen, anhand derer Sie feststellen können, ob Ihre Nichtübereinstimmung gültig ist.

Objektive Meinungsverschiedenheiten führen zu einer oder mehreren der folgenden Aktionen:

  • Zeigen Sie, dass die Lösung nicht informiert ist.
  • Zeigen Sie, dass die Lösung falsch informiert ist.
  • Zeigen Sie, dass das Problem oder die Lösung unlogisch ist.
  • Zeigen Sie, dass die Lösung unvollständig ist.

Nicht informiert zu sein ist keine Beleidigung, sondern bedeutet, dass Informationen fehlten, als eine Lösung erstellt wurde. Vielleicht wussten sie nichts über ein System, das derzeit existiert, und können die erforderlichen Aktionen ausführen.

Falsch informiert zu sein bedeutet, dass die Lösung aus falschen Informationen stammt.

In diesem Fall denken sie möglicherweise, dass ein vorhandenes System etwas tut, was es tatsächlich nicht tut. Möglicherweise hat Sie das SEO-Team (Suchmaschinenoptimierung) gebeten, Google eine angemeldete Seite in Ihrer Anwendung indizieren zu lassen. Google kann das nicht. Sie wurden falsch darüber informiert, was der Crawler von Google tut.

Ein unlogisches Problem oder eine unlogische Lösung ist einfach nicht sinnvoll. Als Entwickler denke ich, dass eine häufige unlogische Anfrage, die Sie möglicherweise sehen, eine Funktion betrifft, die eine andere Funktion beschädigen könnte. Es könnte als unlogisch angesehen werden, dies zu tun, weil es eher schaden als helfen würde.

Eine unvollständige Lösung kann tatsächlich beabsichtigt sein. In der Softwareentwicklung versuchen wir oft, zunächst ein MVP (Minimum Viable Product) zu erstellen. Dies bedeutet, dass wir zunächst absichtlich Funktionen weglassen können, die nicht unbedingt erforderlich sind.

Stattdessen sollten Sie eine Lösung nur dann als unvollständig betrachten, wenn sie das unmittelbare Problem, das Sie beheben sollen, nicht löst oder wenn die angegebenen Schritte nicht ausreichen, um ein funktionierendes Produkt oder eine funktionierende Funktion zu erstellen.

Zusammenfassung

Denken Sie daran, diesen Prozess nicht zu formalisieren. Es sollte schnell gehen und wahrscheinlich darin bestehen, ein paar Gedanken in Ihre Notes-App zu schreiben. Dann könnte es möglicherweise zu einigen Gesprächen mit Ihren Mitarbeitern kommen, um zu klären, was Sie tun sollen. Das ist alles!

Hier ist eine vereinfachte Liste der Schritte:

Schritt 1 - Analysieren

  • Klassifizieren
  • Zusammenfassung
  • Gliederung
  • Definiere das Problem

Schritt 2 - Interpretieren und bewerten

  • Begriffe klären
  • Identifizieren Sie die Aufgaben
  • Stellen Sie fest, ob das Problem behoben ist

Schritt 3 - Kritisch denken

  • Wissen, wann man anderer Meinung ist
  • Wissen, wie man nicht zustimmt

Hallo, ich bin Justin Fuller. Ich bin so froh, dass du meinen Beitrag gelesen hast! Ich muss Sie wissen lassen, dass alles, was ich hier geschrieben habe, meine eigene Meinung ist und meinen Arbeitgeber in keiner Weise vertreten soll. Alle Codebeispiele sind meine eigenen und haben nichts mit dem Code der Bank of America zu tun.

Ich würde auch gerne von Ihnen hören. Sie können sich gerne auf LinkedIn, Github oder Medium mit mir in Verbindung setzen. Nochmals vielen Dank für das Lesen!