Was ist das Wichtigste, Nützlichste oder Aufschlussreichste, was Sie in den letzten 12 Monaten gelernt haben? [geschlossen]

14

Viele Leute in der Coding-Community sprechen von kontinuierlicher Verbesserung, absichtlichem Üben und so weiter - aber wenn sie über ihre aktuellen Praktiken sprechen, ist es fast so, als wären sie „vollständig aus den Lenden von Zeus hervorgegangen“, weil man nicht weiß, wie Ihre Meinung hat sich im Laufe der Zeit geändert oder was sie in letzter Zeit gelernt haben.

Hin und wieder gehe ich zu einem Gespräch oder lese ein Buch oder spreche mit jemandem, der sich ein bisschen mehr öffnet, und ich finde, dass ich viel aus diesen Einsichten lerne.

Wenn Sie sich also eine Sache aus den letzten 12 Monaten aussuchen müssten, die Sie gelernt haben, was wäre das?

FinnNk
quelle

Antworten:

18

Ich habe gelernt, dass es nur eines faulen Managers bedarf, um das ganze Projekt zu verderben, aber es braucht viele gute Programmierer, um das Chaos danach aufzuräumen.

Martin Wickman
quelle
Martin, ich habe gestimmt, weil deine Nachricht mich an diesem regnerischen und kalten Samstagmorgen zum Lächeln bringt, aber du antwortest nicht auf die Frage;)
Hinzugefügt "Ich habe das gelernt ..."
Martin Wickman
+1, weil ich diesen Monat einer dieser Programmierer bin. 70+ Stunden letzte Woche == "Ich bin dran im Fass".
Dan Ray
Ich erkenne das! Es sollte Zitat sein! "Es braucht nur einen faulen Manager, um das ganze Projekt zu verderben, aber es braucht viele gute Programmierer, um das Chaos danach aufzuräumen."
Amir Rezaei
12

Nachdem ich Clojure gelernt hatte , begann ich, die Nützlichkeit der funktionalen Programmierung zu erkennen , und mein Java-Codierungsstil war davon stark betroffen. Entgegen der landläufigen Meinung, eine funktionale Programmierung Sprache ist keine absolute Voraussetzung für eine funktionale Programmierung zu tun.

Es ist möglich, einige Elemente der funktionalen Programmierung in eine imperative Sprache wie Java zu integrieren, und selbst wenn dies nicht immer idiomatisch ist, kann es bei einigen Problemen von großem Nutzen sein. Beispielsweise entsprechen anonyme Klassen in etwa Abschlüssen, wie in Wikipedia beschrieben . Lazy Evaluation sollte eher eine Norm als etwas Ungewöhnliches sein. Unveränderlichkeit kann kaum überbeansprucht werden. Überdenken Sie einfach die (fast) veraltete Idee, dass das Konstruieren neuer Objekte anstelle des Mutierens vorhandener Objekte aufgrund des GC- und Heap-Verbrauchs teuer ist - in 99,9% der Fälle ist dies einfach nicht relevant. Tatsächlich kann die parallele Verarbeitung sogar das Effizienzargument umkehren: Das Erstellen neuer unveränderlicher Objekte kann billiger sein als das Mutieren vorhandener Objekte , da Sie das Sperren aufheben.

Weitere Informationen über FP in reinem Java zu tun hier , hier , hier und hier .

Joonas Pulakka
quelle
+1 Ich stimme zu. Es ist traurig, dass Java die funktionale Programmierung so schlecht unterstützt.
Jonas
Ich habe ein langjähriges Interesse an FP (mein erster Job war Lisp) und ich finde es sehr aufregend, dass es in den letzten Jahren neben OO etc. endlich zu einem ziemlich „gängigen“ Paradigma geworden ist
FinnNk
Java 7 sollte zumindest bessere Abschlüsse haben. Und die Verwendung cleverer Bibliotheken wie Lambdaj kann Wunder bewirken, dass die Mängel der Sprache selbst behoben werden.
Joonas Pulakka
Ich hätte gerne eine bessere Unterstützung für die Schwanzrekursion in Java / JVM.
Jonas
1
@Helper-Methode: Die ersten beiden Links in meiner Antwort sind Artikel über FP mit Java. Mir sind keine Bücher zu diesem Thema bekannt. Ich denke, die beste Methode, um es zu "bekommen", besteht darin, eine tatsächliche FP-Sprache zu lernen und dann einfach damit zu beginnen, unveränderlichere Objekte in Ihrem Java-Code zu verwenden.
Joonas Pulakka
10

Selbst wenn Sie ein hervorragendes Team und ein kompetentes Management für dieses Team haben, ist Ihr Job immer noch nicht sicher. Das obere Management kann immer noch dumme Dinge tun, wie die Auflösung Ihrer gesamten Direktion.

Kurz gesagt: Politikangelegenheiten und manchmal die Politik, die Sie betrifft, können Sie nicht kontrollieren.

Frank Shearar
quelle
Ich gebe dir eine virtuelle +1, weil Martin mich schon mit einer ähnlichen Antwort zum Lächeln bringt;) Hast du Dead March gelesen? Dies ist ein Buch über das, wovon Sie sprechen
(Ich
9

Ich habe gelernt, dass der Zweck von Softwaretests darin besteht, Fehler zu finden . Es ist nicht zu überprüfen, ob das System korrekt ist.

Es gibt wichtige psychologische Faktoren: Wenn Sie zeigen möchten, dass das Programm "korrekt" ist, werden Sie sich auf Tests konzentrieren, von denen Sie wissen, dass sie bestanden werden. Wenn Ihr Ziel jedoch darin besteht, Fehler zu finden, werden Sie sich auf Tests konzentrieren, die Ihr System wirklich an seine Grenzen bringen.

Es gibt sogar eine wichtige Änderung der von Ihnen verwendeten Sprache. Wenn ein Test einen Fehler findet, nennen Sie ihn erfolgreich . Wenn der Test nicht erfolgreich ist, nennen Sie ihn nicht erfolgreich . Ich ertappte mich dabei, wie ich nach dem Prinzip der "Verifikation" dachte, und das macht einen großen Unterschied.

Dieser psychologische Effekt wird in The Art of Software Testing , einem klassischen Buch, das ich sehr empfehlen kann, ausführlicher besprochen . Der Autor Myers empfiehlt außerdem, dass jeder, der ein Programm testet, nicht der Autor sein sollte, auch nicht in derselben Verwaltungskette. Sie können dies tun, wenn Sie selbst programmieren, es erfordert also Disziplin.

Macneil
quelle
8

Testen Sie die Entwicklung einer Kundenlieferung von Anfang an, um festzustellen, wie sich dies auf die Codequalität auswirkt, und starten Sie sie nur über den JUnit-Launcher in Eclipse. Es ergab sich ein besseres Produkt.


quelle
Beachten Sie, dass ich keine Möglichkeit gefunden habe, "Letzten Komponententest erneut ausführen" an einen Schlüssel zu binden. Dies machte es ein bisschen langweilig.
5

Der wahre Wert der egolosen Programmierung.

Irgendwann wusste ich immer, dass Ego und Programmierung sich nicht mischen, aber die Konsequenzen nie ganz herausgefunden haben. Die Vorstellung, dass Sie Ihre eigenen Praktiken aktiv überprüfen und Fehler finden müssen, habe ich erst im letzten Jahr erkannt. Ich lerne auch, mich aktiv um Kritik an meinen Designs zu bemühen (sowohl in der Benutzeroberfläche als auch im Code).

Um ehrlich zu sein, lerne ich immer noch, wie man das Ego fallen lässt, und ich werde wahrscheinlich für den Rest meiner Programmierkarriere lernen, wie man das macht.

Joeri Sebrechts
quelle
3

Hier ist meine Antwort auf meine eigene Frage:

Vor etwa einem Jahr stellte sich heraus, dass automatisierte Abnahmetests keine automatisierten Versionen der Tests sein mussten, die unsere Tester manuell durchgeführt hätten. Die Konzentration auf Tests anhand einzelner Spezifikationen, anstatt zu versuchen, in einem Durchgang so viele Treffer wie möglich zu erzielen, machte die Tests viel einfacher, leichter lesbar und förderte auch die schrittweise Bereitstellung.

FinnNk
quelle
3

Ich habe gelernt, wie ein mathematisches Konzept wie Semirings auf Algorithmen angewendet wird. Hiermit können Sie zeigen, wie einige Algorithmen identisch sind, außer dass ein anderes Semiring verwendet wird. Das sollte für mich als Programmierer nicht so seltsam sein, aber mir war der Kopf geblasen.

Peter Stuifzand
quelle
1
Hast du ein Beispiel dafür?
Mark C
Es gibt ein Beispiel in dem Buch Element of Programming, das eine Funktion verwendet, die Potenzen und einige Fibonacci-Dinge berechnet, die Fib in O (log n) -Zeit berechnen. Ich denke, das Beispiel finden Sie hier cpp-next.com/archive/2010/03/eop-ch3-preview , aber diese Website antwortet mit einem internen Serverfehler .
Peter Stuifzand
3

Neben der Politik, die Frank Shearar erwähnte , habe ich kürzlich QUnit und JSCoverage entdeckt, die meinen Tag gemacht haben. Und Monat. Ich hätte nie gedacht, dass es möglich ist, JavaScript mit Code-Coverage zu testen , aber da ist es ... :-)

Dr. Hannibal Lecter
quelle
Dies ist auf meinem Radar für das nächste Jahr, ich habe mich ein bisschen in js Unit-Tests versucht, aber noch nicht in einem richtigen Projekt. Ich wusste nicht, dass ein Berichterstattungstool verfügbar ist!
FinnNk
2

Mein dreifacher Dank für das letzte Programmjahr geht an Folgendes (in absteigender Reihenfolge nach Wichtigkeit und Dankbarkeit):

  • Das funktionale Programmierparadigma, um mich für andere, oft elegantere und knappere Wege zu öffnen, Ideen und Algorithmen im Code auszudrücken. Ich habe das Gefühl, dass sich meine Programmierkenntnisse dank funktionaler Programmierideen innerhalb kürzester Zeit erheblich verbessert haben.

    (Mein persönlicher Dank geht an Tomáš Petříček für sein hervorragendes Buch Real-world functional programming .)

  • Sowohl die Abhängigkeitsinjektion als auch das Testen von Einheiten haben mich gelehrt, dass die Objektzusammensetzung wahrscheinlich der beste Weg ist, um komplexe (objektorientierte) Systeme zu erstellen (und dass die Klassenvererbung nicht annähernd so wichtig ist, wie ich es früher gedacht habe). Beide haben mich gelehrt und mich darüber nachdenken lassen, wie ich Systeme am besten zusammenstellen und Komponenten schreiben kann, die einfach zu verwenden und dennoch flexibel genug für die Wiederverwendung sind.

    (Wenn ich eine gute Lehrquelle erwähnen müsste, würde ich Roy Osheroves Art of Unit Testing nennen .)

All dies zusammen hat dazu geführt, dass ich Code geschrieben habe, der im Allgemeinen weniger Fehler aufweist als zuvor, da ich jetzt Code schreibe, der viel einfacher zu verstehen und falsch zu verstehen ist als das, was ich zuvor ausgegeben habe.

stakx
quelle
2

Was sich auch immer in der sich schnell entwickelnden Softwareindustrie ändert, die Lernkurve ist immer da. "Wenn es nur einen Weg gäbe, zu lernen, ohne sich Zeit zum Lernen zu nehmen."

Wassimanen
quelle
Die Tatsache, dass es immer wieder Neues zu lernen gibt, ist für mich einer der großen Anziehungspunkte dieses Berufs. In IT-Systemen geht es oft darum, mit zunehmender Komplexität am besten umzugehen, und ich liebe es, neue Theorien und Konzepte in diese Richtung zu entdecken. Andererseits kann es manchmal frustrierend sein, mit dem Stand der Technik Schritt halten zu müssen, kann sich ein wenig wie ein ständiges Rennen anfühlen.
Stakx
1

Ich habe gelernt, dass der Verkauf an ein neues Unternehmen Ihren Job tatsächlich verbessern kann. Meine Organisation wurde im Mai von unserer alten Firma gekauft, und die Dinge scheinen immer besser zu werden. Das neue Unternehmen hat nur wenig / keine Kosten in unserem neuen Büro gespart, unsere veralteten Entwicklungsmaschinen durch Geräte des 21. Jahrhunderts ersetzt, Flexibilität bei der Verwaltung unserer Projekte bewiesen und uns im Allgemeinen das Gefühl gegeben, mehr als willkommen zu sein.

Es fühlt sich ein bisschen deprimierend an, verkauft zu werden (ein bisschen wie ein Leibeigener, der einen neuen Feudalherrn hat, weil er an ein Land gebunden ist, das den Besitzer gewechselt hat), aber das Endergebnis war viel besser als ich erwartet hatte.

Bettwyr
quelle
0

Ich würde sagen, mit Microsoft Unit Testing in Visual Studio 2010.

Ich fand es wirklich einfach, eine bestimmte Testmethode zu debuggen.

Ich könnte mein Testprojekt jederzeit ausführen, um festzustellen, ob die Business-Layer-Anwendung ordnungsgemäß funktioniert. Der Testprozess garantiert, dass mein Team keine Probleme bei der Bereitstellung der vollständigen Lösung für die Besucher unserer Website haben sollte.

Junior M
quelle
0
  • Grundlegendes Python gelernt (manchmal zum Schreiben von schnellen Skripten)

  • Installierte ArchLinux in VM (hatte Ubuntu in VM früher, mein PC ist jetzt schnell!)

  • Schritte mit MATLAB (insbesondere zum Zeichnen von Diagrammen und schnellen numerischen Überprüfungen)

  • Umstellung auf Mercurial (von SVN) (Verzweigen und Zusammenführen!)

Vaibhav Bajpai
quelle
0

Das Lernen des MVVM- Musters hat mir geholfen, viel weniger zu hacken.

bufferz
quelle
-1

Ich musste anfangen, eine Python-Webanwendung zu warten - daher entschied ich, dass es eine gute Zeit war, auch Vim zu lernen . Jetzt verwende ich das IdeaVim-Plug-in für Intellij für meine Java- und Flex-Entwicklung und bin definitiv der Meinung, dass ich dadurch schneller und effizienter schreiben kann.

Watson
quelle
1
Wirklich -1? Sie möchten das für mich auspacken - die Leute glauben nicht, dass VIM aufschlussreich oder nützlich ist?
Watson