https://en.wikipedia.org/wiki/Pair_programming
Was macht man wenn man sich nicht riechen kann und so den ganzen Tag auf
der Pelle hocken muss? Oder andersrum, haben schon solche "Paare"
geheiratet?
Gibts auch Gang Programming?
Die IT-Welt wird immer perverser.
Generalkonsul schrieb:> Was macht man wenn man sich nicht riechen kann und so den ganzen Tag auf> der Pelle hocken muss? Oder andersrum, haben schon solche "Paare"> geheiratet?>> Gibts auch Gang Programming?>> Die IT-Welt wird immer perverser.
Ich habe das ein Jahr gemacht. Aber freiwillig, weil es passte. Und nur
dann geht das m.E. auch. Ganz klassisch, ein junger und ein erfahrener
als Zweier-Team, so Watson - Crick. Kam natürlich, wie es kommen musste,
nach dem Jahr war Crick aus der Firma gemobbt.
Bei den Beschreibungen von VW handelt es sich m.E. eher um ein Modell,
geregelte Arbeitszeiten und gegenseitige Kontrolle über diesen "hippen"
Style zu etablieren. Mit jungen Leuten ohne work-life-balance kann man
das machen.
Zum Glück nicht. Bleib mir weg mit dem Scheiss. Mir reicht schon, dass
wir jetzt ein Großraumbüro eingeführt haben und mir alle Kollegen im
Nacken auf den Monitor gaffen können. Für mich ein Kündigungsgrund.
Max der Hochstapler schrieb:> Zum Glück nicht. Bleib mir weg mit dem Scheiss. Mir reicht schon, dass> wir jetzt ein Großraumbüro eingeführt haben und mir alle Kollegen im> Nacken auf den Monitor gaffen können. Für mich ein Kündigungsgrund.
Geh halt ins Homeoffice, da kannst du weiterhin unbeobachtet rumdaddeln
:D
Aber wer führt denn in Corona-Zeiten Großraum ein?
Generalkonsul schrieb:> https://en.wikipedia.org/wiki/Pair_programming>> Was macht man wenn man sich nicht riechen kann und so den ganzen Tag auf> der Pelle hocken muss?
Mir würde es gefallen :-)
Der eine oder andere wäre es mir schon wert auf meinen Stuhl zu
verzichten...
Blöd nur wenn der Chef reinkommt, oder seine Frau :-D
Ich habe schon vor Y2K Pairprogramming praktiziert und dabei von
gewissen Vorteile davon gut profitiert.
Der Merksatz lautet ungefähr: «4 Augen und 4 Hirnhälften am selben
"Werkstück" erreichen mehr als bloss 2 Augen und 2 Hirnhälften»
Ohne Preis geht das nicht:
- die 2 welche das "Pair" bilden müssen sich ertragen/mögen (können)
(keine sozialhandicappierte Mimöschen sein),
- das dabei erreichte Konzentrationsniveau ist hoch und zermürbend (d.h.
Pairprogramming praktiziert man nur punktuell und pausiert öfters
dazwischen) Ich jedenfalls errinnere mich ans "Ausgelaugt sein"
danach...
Dauerzustand über 8h/Arbeitstag KANN NICHT im Modus Pairprogramming
durchgezogen werden!
Die damit erreichten Erfolge sind aber definitiv positiv UNMATCHED!
Sowohl im Bereich "Erstimplementation", "Architekturumpflügen" wie auch
"Fehlersuche"; selbstverständlich nicht in der Aufgabenklasse "Hello,
world!" oder nur in 64kB Adressraum... sondern in Anwendungsfälle welche
mehr als 16MB RAM erforden und in konkurrierendem Multitasking
nicht-triviale Datenmodelle beackern.
Bei W7 hat M$ das angeblich gemacht. Soll auf Anhieb gute Ergebnisse
geliefert haben.
Praktisch ist das ein Review gleich beim Erstellen. Kann mir gut
vorstellen, dass das was bringt.
Max der Hochstapler schrieb:> Zum Glück nicht. Bleib mir weg mit dem Scheiss. Mir reicht schon, dass> wir jetzt ein Großraumbüro eingeführt haben und mir alle Kollegen im> Nacken auf den Monitor gaffen können. Für mich ein Kündigungsgrund.
Tschüss
Roland E. schrieb:> Bei W7 hat M$ das angeblich gemacht. Soll auf Anhieb gute Ergebnisse> geliefert haben.>> Praktisch ist das ein Review gleich beim Erstellen. Kann mir gut> vorstellen, dass das was bringt.
Nur weil was gut klingt, muss es nicht auch wirklich gut sein. Siehe
diverse Ideen und Produktankündigungen von Elon Musk. ;-)
Wenn eine Idee WIRKLICH gut ist, muss sie sich reproduzierbar in der
harten Realität beweisen und dann auch DEUTLICH sicht- und messbare
Vorteile bringen.
> Gibts bei euch Pairprogramming
Leider nein. Ich bin gefühlt der einzige, der bei den anderen hin und
wieder in die Git commits reinschaut um zu sehen ob da wenigstens
einigermassen Features und fixes separat commited werden.
Falk B. schrieb:> Wenn eine Idee WIRKLICH gut ist, muss sie sich reproduzierbar in der> harten Realität beweisen und dann auch DEUTLICH sicht- und messbare> Vorteile bringen.
Ja, das wäre gutes Vorgehen. Dafür müsste man vor der Einführung ja
schon gute Metriken haben über die Produktivität (oder parallel ein
vergleichbares Team/Projekt als Kontrollgruppe). Und das haben leider
viele Firmen nicht oder ihre Metriken sind durch "lustige" Regeln
unbrauchbar gemacht worden (ist bei uns so...).
Christoph Z. schrieb:> Leider nein. Ich bin gefühlt der einzige, der bei den anderen hin und> wieder in die Git commits reinschaut um zu sehen ob da wenigstens> einigermassen Features und fixes separat commited werden.
Und was hat das mit diesem elendigen Pairprogramming zu tun?
Beim Pair Programming geht es nicht darum den Review "zu sparen", der
sollte sowieso von jemandem gemacht werden der nicht am Code
mitgearbeitet hat.
"mal in die Git commits reingucken" hat also nix mit Pairing zu tun.
Da geht es darum, gemeinsam an etwas zu arbeiten, mit verschiedenen
Rollen, aus unterschiedlichen Perspektiven, high-level und im Detail,
derjenige "der Führt" kümmert sich um die Details, die andere Person
eher um das high-level Bild.
Damit gibt es schon einen regen Austausch während dem Entwickeln.
Ist auch super um auch neue Leute einzulernen bzw. Wissen zu
transferieren, etwas über die Code Basis zu lernen und sich ein paar
Tricks mit der IDE abzugucken.
Pair Programming kommt ursprünglich aus der "extreme Programming" Ecke,
ist aber mittlerweile sehr normal, so dass da nix mehr "extrem" ist, da
ist zB. mit CI/CD und TDD auch so.
Mir macht das Spass :)
Max der Hochstapler schrieb:> Und was hat das mit diesem elendigen Pairprogramming zu tun?
War ein Beispiel, wie weit weg wir hier von der Denkweise sind, wo man
überhaupt beginnt über Pairprogramming nachzudenken.
Ordnung halten im Repo? Reviews machen? Schön wärs. (Aber eigentlich
verlangt in unserer Branche...)
Hab das vor sieben Jahren einmal gemacht, mit zwei Kollegen, mit denen
ich auch gut befreundet war. Dabei waren wir nicht zu zweit sondern zu
dritt. Außerdem haben wir das per Skype mit Screensharing gemacht, damit
wir uns nicht zu dritt hinter einem Bildschirm quetschen mussten. Die
Aufteilung war so, dass einer das Tippen übernommen hat (hatte auch die
Hoheit über Variablennamen und Git-Commits) und die anderen zwei haben
sich ständig ausgetauscht wegen High-level-Zeugs und haben auch
angesagt, was zum Tippen ist. Es ist anstrengend, aber dafür war das
qualitativ guter Code. Die Mentalität war auch so, dass man
Streitigkeiten vermieden hat und dann einfach gesagt hat, man soll doch
schnell im Pseudocode zeigen was gemeint ist. Da gab es immer wieder
Ah-und-Oh-Momente und einen gewissen Lerneffekt.
Dem Kollegen, der die Tests geschrieben hat, hat das auch gefallen, weil
es kaum Fehler gab und er die Tests in einem Rutsch schreiben konnte,
ohne auf einen Bugfix von uns zu warten. Der Chefetage hat das nicht
ganz gefallen, weil hier drei Mitarbeiter die Leistung von zwei erbracht
haben.
Mladen G. schrieb:> Pair Programming kommt ursprünglich aus der "extreme Programming" Ecke,> ist aber mittlerweile sehr normal, so dass da nix mehr "extrem" ist, da> ist zB. mit CI/CD und TDD auch so.>> Mir macht das Spass :)
Mir nicht.
Grano U. schrieb:> Der Chefetage hat das nicht> ganz gefallen, weil hier drei Mitarbeiter die Leistung von zwei erbracht> haben.
Aha. Und welches KPI haben die da in ihrer unermesslichen Weisheit zu
Hilf genommen?
"Pair Programming" mit mehr als zwei nennt man übrigens "Mob
Programming" und ist richtig gut.
Komischerweise haben die Chefs nie Probleme damit die Leute Stundenlang
in irgendwelche bescheuerten Meetings zu setzen.
Grano U. schrieb:> Der Chefetage hat das nicht> ganz gefallen, weil hier drei Mitarbeiter die Leistung von zwei erbracht> haben.
Das sind Effekte die man bekommt wenn ein paar Hierarchiestufen
übersprungen werden, aka "micro management", die "Chefetage" hat
eigentlich andere Aufgaben, ob eine bestimmte Praxis hilfreich ist oder
nicht, ist eine Teamentscheidung.
Die obere Etage darf sich dann Gedanken machen ob das Team funktioniert
bzw. die Leistung bringt die es soll.
Das ist nix anderes als wenn der Chef deines Chefs zu dir an den
Arbeitsplatz kommt und anfängt dir den Code zu diktieren, oder dir ein
paar extra Aufgaben zuschiesst, das geht komplett am der Teamarbeit
vorbei.
Schlimmer wird es eigentlich nur mit "Projektmanagern", wenn das Team
bzw. Individuen im team der Meinung sind dass bestimmte Dinge nicht
gehen im einem bestimmten Zeitraum, ist die Motivation auch weg, "ich
hab ja gleich gesagt dass das nicht geht" kann man danach hören,
sozusagen als Rechtfertigung.
Wenn Teams selber entscheiden und dafür geradestehen, ist das eine ganz
andere Sache.
Fehler machen ist normal, Menschen lernen durch Fehler die sie als
solche anerkennen, es geht ja nicht um Perfektion, sondern um stetige
Verbesserung.
TGIF schrieb:> Grano U. schrieb:>> Der Chefetage hat das nicht>> ganz gefallen, weil hier drei Mitarbeiter die Leistung von zwei erbracht>> haben.>> Aha. Und welches KPI haben die da in ihrer unermesslichen Weisheit zu> Hilf genommen?
keine Ahnung. Vermutlich Bauchgefühl zusammen mit einem Business-Orakel
> "Pair Programming" mit mehr als zwei nennt man übrigens "Mob> Programming" und ist richtig gut.
Danke. Wusste ich nicht. Mob Programming klingt aber schon sehr
aggressiv.
Grano U. schrieb:>> "Pair Programming" mit mehr als zwei nennt man übrigens "Mob>> Programming" und ist richtig gut.> Danke. Wusste ich nicht. Mob Programming klingt aber schon sehr> aggressiv.
Schon mal was von Sarkasmus gehört?
Beim Pair-Programming stört es mich kolossal, ständig alles zu erklären
"Das ist ein void-Pointer, damit kann man auf beliebige Dinge zeigen",
"das ist eine globale Variable, die ist schlecht für die Architektur
weil...", "das ist ein generischer Algorithmus, der ermöglicht
typsichere Verarbeitung unterschiedlicher Datentypen", "hier haben wir
eine Race-Condition, da brauchen wir ein Synchronisationsprimitiv, denn
moderne Prozessoren haben Caches"... Das degeneriert irgendwie immer zu
einer Vorlesung.
Programmierer schrieb:> Beim Pair-Programming stört es mich kolossal, ständig alles zu erklären> "Das ist ein void-Pointer, damit kann man auf beliebige Dinge zeigen",
Das ist nicht pair programming. Das ist Schulung. Und vermutlich Recht
ineffektiv.
Da ist es besser, 2 Anfänger zusammen arbeiten zu lassen und vieles zu
übersehen. Auch Fahrradfahren muss man am Ende selber lernen. Und das
geht ohne gute Ratschläge besser.
Anfänger lässt man innovative Sachen machen, deren Code man am Ende zur
Not wegschmeißen oder neu machen kann.
A. S. schrieb:> Da ist es besser, 2 Anfänger zusammen arbeiten zu lassen und vieles zu> übersehen. Auch Fahrradfahren muss man am Ende selber lernen. Und das> geht ohne gute Ratschläge besser.
Kann gut sein, aber wer das seit 20 Jahren macht wird nicht plötzlich
anfangen sich selbsttätig einzulernen und mal zu schauen was z.B. ein
void-Pointer ist.
A. S. schrieb:> Anfänger lässt man innovative Sachen machen, deren Code man am Ende zur> Not wegschmeißen oder neu machen kann.
Ich glaub Anfänger programmieren den größten Teil der Software der so im
Umlauf ist.
Programmierer schrieb:> Ich glaub Anfänger programmieren den größten Teil der Software der so im> Umlauf ist.
2018 hab ich auf einem Vortrag gehört dass sich die Anzahl der SW
Entwickler alle 5 Jahre verdoppelt, d.h. dann dass 50% der Entwickler
weniger als 5 Jahre Berufserfahrung haben.
Sind zwar keine Anfänger mit 4,5 Jahren Berufserfahrung, aber es sollte
klar sein warum solche Praktiken wie Pair Programming, Peer Reviews etc.
Vorteile haben können.
Statt nebeneinander zu glucken geht das heutzutage per Team/Zoom usw.
doch viel besser.
Man sieht den Bildschirm des anderen, kann auf seinem zweiten Bildschirm
noch was selber hacken und umgekehrt.
Programmierer schrieb:> Kann gut sein, aber wer das seit 20 Jahren macht wird nicht plötzlich> anfangen sich selbsttätig einzulernen und mal zu schauen was z.B. ein> void-Pointer ist.
Uups, :-( ja, das kenne ich auch )-:
Mit geballten Ratschlägen, was der Compiler falsch macht, so mit immer
ein else-Zweig sonst spinnt der oder so.
Programmierer schrieb:> Wenn man solche Probleme hat, hat man den falschen Compiler...
nein. Das war von den Kollegen mit 20 Jahren Erfahrung und großen Augen
wofür void denn gut ist.
Generalkonsul schrieb:> https://en.wikipedia.org/wiki/Pair_programming>> Was macht man wenn man sich nicht riechen kann und so den ganzen Tag auf> der Pelle hocken muss? Oder andersrum, haben schon solche "Paare"> geheiratet?>> Gibts auch Gang Programming?>> Die IT-Welt wird immer perverser.
Haha, ich hatte das mal bei einem Praktikum.
> A: Hey du, du hast da den Pointer auf die struct nicht dereferenziert, das
kompiliert nicht mit der Funktion da
> B: Neeeee, ich mach hier mal weiter...<tip tip tip>> A: Okay> B: <tip tip tip><ctrl+s><make><ENTER>> Compiler: ;_;> A: Na siehst du.> B: Achja, so war das gemeint.
Jaaaah, sehr produktiv. Und gerade beim Programmieren völlig nutzlos.
Kritischen Input braucht man in der Designphase und beim Review der
Implementierung. So drücken 2 quasi zur gleichen Zeit dieselben Tasten
und merken gegenseitig, was der Compiler auch sofort merkt :/
Oliver S. schrieb:> Statt nebeneinander zu glucken geht das heutzutage per Team/Zoom usw.> doch viel besser.
Absolut korrekt.
Für die Besitzer von Team/Zoom ist es wirklich viel besser. Die
Betriebsgeheimsnisse werden direkt frei Haus geliefert.
Das ist wieder mal so ein neumodischer Mist. Da sitzen dann zwei Leute
vorm Rechner, tratschen über Privates und machen die Arbeit von einem.
Das kann sich auch nur ein Konzern erlauben.
Bei komplexen Themen da holft man sich natürlich Kollegen zur Hilfe oder
bespricht im Team etwas, vorallem grundlegende Dinge. Das sollte aber
nur einen kleinen Teil der Arbeitszeit betreffen.
Three Lions on the shirt schrieb:> Das ist wieder mal so ein neumodischer Mist. Da sitzen dann zwei Leute> vorm Rechner, tratschen über Privates und machen die Arbeit von einem.> Das kann sich auch nur ein Konzern erlauben.
Im Gegenteil: Da sitzen 2 Leute und kreieren die Architektur des Moduls
indem sie darüber sprechen und das ganze auch instanziieren. Einer
Tippt, der andere prüft die Abläufe, Namen und Konzepte entstehen.
Und wenn es nur bessere Namen gibt, lohnt es sich schon. Denn schreiben
geht schnell, viel öfter und länger wird der Code gelesen.
Ich bin da sehr gespalten was das ganze Pairprogramming angeht.
Es gibt durchaus Phasen wo es sinnvoll ist, wenn zwei drauf schauen.
Besonders da sehe ich es als sinnvoll an, wenn ein erfahrener und
unerfahrener Kollege/in zusammenarbeiten. Lernen und Lehren macht mir
Spaß.
Ich habe dieses Doppel-Bearbeiter Modell auch schon bei anderen Aufgaben
gesehen und erlebt, z.B. beim langwierigen Ausfüllen komplexer Excel
Dokumente. Da war es sogar vom Kunden gefordert und bezahlt.
Das war TEILS sinnvoll weil es Fehler vermeidet hat. In vielen Fällen
aber führt das dazu, dass einer klickt und tippt und der andere mental
abschaltet bzw. nur noch auf Zuruf denkt. Mir persönlich ist die Rolle
des Zusehers zu passiv, da fühle ich mich derart unterfordert, dass ich
mich immer wieder dabei ertappe, über andere Probleme nachzudenken. Wenn
ich selbst tippe bin ich eher zufrieden.
Alleine(!) am Dokument inhaltlich arbeiten nur nach Genehmigung des
Kunden erlaubt.
Die Teams wurden bei uns auch relativ wild zusammengewürfelt. Hat
teilweise schlecht funktioniert, ein "mit X mach ich nix mehr!" war fast
schon an der Tagesordnung. So etwas verstärkt auch die Grüppchenbildung
noch mehr.
Je nach Persönlichkeit der Personen macht es letztendlich wieder nur
einer:
- Du hast einen sehr dominante Person + eine sehr schüchterne Person die
etwas bewerten sollen. Das Ergebnis ist dann 90%/10% der Meinungen, wenn
überhaupt.
- Du hast einen der geht dir auf den Sack. Dann hast du keinen Bock zu
diskutieren. Macht auch wieder so 80%/20%
- Du hast einen der hat keinen Bock auf den Job? Na dann wirds 0%/100%,
der spielt am Handy während du tippst.
Generalkonsul schrieb:> Gibts auch Gang Programming?
Natürlich. In Vor-Corona Zeiten waren bei manchen internen Reviews sogar
drei Leute vorm Rechner. Die zwei ausführenden + nochmal einer zum
kritisch Drüberschauen. Leider kein Witz.
Das Problem hier ist, dass die GRUNDIDEE eine sehr gute ist, siehe oben:
Vier Augen sehen mehr als zwei und die Leute lernen was.
Aber die Umsetzung ist falsch. Es wurde einfach die Methode "Pair
Programming" kopiert, ohne den Mechanismus und die Idee dahinter
durchdrungen zu haben. Damit kehrt sich das dann ins Gegenteil um. Ein
echter Zeitkiller mit niedriger Effizienz.
Pair programming kenne ich anders.
Da bekommt einer die Arbeit von zwei aufgebürdet, was nach Ansicht der
GF dann auch zu sofortigen guten Ergebnissen und erstklassiger Doku
führen soll.
Als Mentorenprogramm noch vorstellbar, aber zwei gute Programmierer an
einer Aufgabe?
Wer hat denn die im Übermaß?
Ich finde das Konzept generell interessant. Wie oft blockiert man sich
gedanklich oder in der Umsetzung selber. Mit einem Kollegen, der
hinreichend in den ganzen Gedankengängen steckt und die Software kennt,
lässt sich so ein Schwebezustand doch viel schneller auflösen als mit
substanzlosem Palaver....
Oder geht das euch nicht so, dass ihr mal stockt? Man muss sich aber
ganz bestimmt gegenseitig eingrooven und je nach Alphamännchen kann es
auch mal mehr mal weniger funktionieren.
Aber ist doch eh nur Theorie. Meine Geschäftsleitung würde nur sehen: 2
Mitarbeiter für eine Arbeit ist Verschwendung. Da wird nämlich an allen
Ecken und Enden Zeit verpulvert, leere Besprechungen gahalten, Power
Points erstellt....aber wenn man konkrete Zahlen von Tagen oder Stunden
hört die nicht direkt ersichtlich sind, ist das Geschrei groß.
Mike schrieb:> Meine Geschäftsleitung würde nur sehen: 2 Mitarbeiter für eine Arbeit> ist Verschwendung. [...]> aber wenn man konkrete Zahlen von Tagen oder Stunden hört die nicht direkt> ersichtlich sind, ist das Geschrei groß.
Was habt ihr alle nur für seltsame Chefs?!
Vor allem frage ich mich: Wenn ich das Geld, das ich für zwei schlechte
bis mittelmäßige Programmierer ausgeben muss, für einen Top-Mitarbeiter
ausgebe, kommt dann am Ende nicht mehr dabei heraus?
Natürlich ist es einfacher zu sagen, ich brauch da mal zwei
Programmierer für 60k€ im Jahr, als zu sagen: Ich will da nen
Spezialisten für 120k€ im Jahr anstellen.
doppel schrieb:> für einen Top-Mitarbeiter ausgebe, kommt dann am Ende nicht mehr dabei> heraus?
Das Blöde an Top-Programmierern ist, dass sie sich schnell langweilen.
Wenn man denen einfache Aufgaben gibt, wie sie nun mal im Tagesgeschäft
vorkommen, bauen die fantastische overengineered Lösung, die dann keiner
warten kann. Gerade in Deutschland ist es so, dass die allermeisten
Firmen "nur" gewöhnliche Anwendungen entwickeln ohne große technische
Herausforderung - Hauptsache, es funktioniert irgendwie. Technische
Innovation ist ja eher was für die USA oder China. Außerdem könnten die
Top-Programmierer vor lauter Unterforderung depressiv werden und
ausfallen oder kündigen. Die normalen Programmierer sind da beständiger.
Es fährt ja auch keiner mit einem Formel 1-Auto zum Supermarkt, selbst
wenn die Straßenzulassung hätten - zu dem Preis bekommt man viele
zuverlässige VW Golf's.
doppel schrieb:> Ich will da nen Spezialisten für 120k€ im Jahr anstellen.
Das wird in den wenigsten Firmen funktionieren... einen
Top-Programmierer von einem Blender zu unterscheiden ist auch nicht so
einfach.
doppel schrieb:> In vielen Fällen> aber führt das dazu, dass einer klickt und tippt und der andere mental> abschaltet bzw. nur noch auf Zuruf denkt.
Eigentlich ist das umgekehrt: Einer Tippt, der andere entwirft. Wenn
jemand entwirft und eintippt, dann ist der zweite überflüssig, ein Opfer
oder Zuschauer (es gibt Leute, eher Handwerker, die können nur arbeiten,
wenn sie dabei anderen erzählen, was sie alles machen).
Ist ja oft woanders auch, einer misst, der andere notiert. Einer
erzählt, der andere schreibt mit. Nicht nur passiv, sondern als aktiver
Zuhörer/Journalist/Qualitätsbeauftragter/Prüfingenieur.
Also ich persönlich finde es nicht schlimm, den Gedanken an sich nicht
zu mögen. Aber einige Beiträge sind einfach nur plump, missgünstig,
arrogant und zeugen von Unerfahrenheit/Überheblichkeit.
Jede/r der große und/oder komplexe Software entwickelt hat erfahren,
dass das Gesamtergebnis nur so gut sei kann, wie es der Schwächste unter
den Entwicklern ist.
Und Qualität kann man messen und spielen kostenseitig eine große Rolle.
Wie heißt es so schön? "Entdecke die Möglichkeiten..."
PS: Auf dem Fußballplatz trainieren auch nicht die D-Mannschaft und die
Bundesliga gemeinsam... Das Setting bekommen gute Führungskräfte locker
hin.
Für das normale Runterprogrammieren von Standardaufgaben braucht man
meiner Meinung nach nicht unbedingt zusammenzusitzen.
Interessant wird es eher bei:
- neuen Technologien
- Fehlersuche
- Performanceverbesserungen
- Multithreading
Auch finde ich Code-Review eigentlich nur eine Strafarbeit. Das kann
jeder Entwickler selber besser abdecken, wenn er Tests für seinen Code
schreibt.
Interessant finde ich den Ansatz, das Programmieren durch einen KI-Bot
zu unterstützen:
https://www.golem.de/news/machine-learning-github-bringt-ki-bot-copilot-zum-programmieren-2106-157750.html
P. P. schrieb:> Auch finde ich Code-Review eigentlich nur eine Strafarbeit. Das kann> jeder Entwickler selber besser abdecken, wenn er Tests für seinen Code> schreibt.
Klingt eher nach schmoren im eigenen Saft.
P. P. schrieb:> Auch finde ich Code-Review eigentlich nur eine Strafarbeit. Das kann> jeder Entwickler selber besser abdecken, wenn er Tests für seinen Code
Das entspricht nicht meiner Realität. Mein KI-Bot meldet Fake-News.
Mache das im Rahmen der Einarbeitung mit neuen Kollegen damit Sie
schneller effektiv selber arbeiten. Ist anfangs völlig in Ordnung und
spart Kosten. Softwareentwicklung ist Team Sport, weil es um die
gemeinsame Verständnis und Lösung von Problemen geht.
Djangos_zahnarzt schrieb:> Mache das im Rahmen der Einarbeitung mit neuen Kollegen damit Sie> schneller effektiv selber arbeiten
Ui, dass stell ich mir aber extrem belastend vor. Ihm was zeigen oder er
Dir, geschenkt. Aber während der Einarbeitung permanent sozialer Stress,
... .
Pair-Prigramming ist wie an einer Tafel eine Formel oder ein Konzept zu
erstellen. Deins hört sich eher an, wie in der Klasse an die Tafel zu
müssen.
Wikipedia:
(pair programming) ... ist ein wichtiger Bestandteil von Extreme
Programming (XP).
....Einer schreibt den Code, während der andere über die
Problemstellungen nachdenkt, den geschriebenen Code kontrolliert sowie
Probleme, die ihm dabei auffallen, sofort anspricht. Diese können dann
sofort im Gespräch gelöst werden. Die beiden Programmierer sollten sich
in den beiden Rollen abwechseln.
-------
Die Betreuung von Anfängern ist kein pair programming.
Reinhard S. schrieb:> P. P. schrieb:>>> Auch finde ich Code-Review eigentlich nur eine Strafarbeit. Das kann>> jeder Entwickler selber besser abdecken, wenn er Tests für seinen Code>> schreibt.>> Klingt eher nach schmoren im eigenen Saft.
Exakt. Teils ist das auch gar nicht zulässig. In der Luftfahrt zum
Beispiel ist bei manchen Anforderungen bzw SW explizit gefordert dass
diese unabhängig vom ursprünglichen Entwickler geprüft wird.
Für den meisten anderen Code ist das auch sehr sinnvoll, sofern
wirtschaftlich vertretbar.
meckerziege schrieb:> Für den meisten anderen Code ist das auch sehr sinnvoll, sofern> wirtschaftlich vertretbar.
(eigene) Tests sind nie eine Lösung, sondern maximal ein
Programmierparadigma: Wenn die gleiche Person Tests und Code schreibt,
dann
a) werden Verständnisfehler des Programmierers nicht erkannt
b) führt das zu Minifunktionen bei mehr Aufrufebenen und mehr code (bzw.
zu aufwändigeren Integrationstests)
c) führt die redundante Programmierung (Test und Code beschreiben ja
spiegelbildlich das gleiche) schnell zur Nachlässigkeit. Man ist eigenen
Fehlern ("ah, mit <= geht es, mit < nicht --> dann <=") gegenüber oft
viel toleranter ;-)
A. S. schrieb:> (eigene) Tests sind nie eine Lösung, sondern maximal ein> Programmierparadigma: Wenn die gleiche Person Tests und Code schreibt,> dann
Ich kann nur sagen: Der Code derjenigen Kollegen, die immer am
vehementesten automatisierte Softwaretests gefordert haben, der hatte
die meisten Bugs. Warum? Weil ihre Tests ja grün waren. Deswegen hielten
sie es nicht mehr nötig, manuell zu testen. Von diesem ganzen Humbug,
automatisierte Softwaretests würden Zeit sparen, will ich erst gar nicht
anfangen. Für jede Codeänderung müssen auch die Tests nachgezogen
werden. Also jedes Mal doppelte Arbeit. Es gibt nur wenige Ausnahmen, in
denen Softwaretests Sinn machen und Zeit sparen. Z.B. wenn das manuelle
Testen sehr komplex, aufwendig und fehleranfällig ist. Oder wenn man nur
Backend programmiert und wegen fehlender UI keine manuellen Tests
möglich sind.
F. B. schrieb:> Es gibt nur wenige Ausnahmen, in denen> Softwaretests Sinn machen und Zeit sparen. Z.B. wenn das manuelle Testen> sehr komplex, aufwendig und fehleranfällig ist. Oder wenn man nur> Backend programmiert und wegen fehlender UI keine manuellen Tests> möglich sind.
Wenn du von "wenigen Ausnahmen" sprichst, meinst du dann Kategorien oder
was? Was ist manuellem Testen? Auf Knöpfe in der GUI klicken? Was genau
meinst du mit UI? Eine GUI?
Was ich mir unter manuellem Testen vorstelle, ist bei nicht trivialer
Software immer aufwendig, komplex und fehleranfällig.
F. B. schrieb:> Es gibt nur wenige Ausnahmen, in> denen Softwaretests Sinn machen und Zeit sparen. Z.B. wenn das manuelle> Testen sehr komplex, aufwendig und fehleranfällig ist. Oder wenn man nur> Backend programmiert und wegen fehlender UI keine manuellen Tests> möglich sind.
Wo TDD richtig gut ist: komplexe Funktionen mit wenigen Ein- und
Ausgaben. Standard-Beispiel sind Mathematische Funktionen, z.B. sin oder
sqrt: Zwei Zahlen, komplexer Code, Sonderbehandlungen (NaN und so), aber
sehr genau in wenigen Sätzen formulierbar, was passieren soll.
In der Praxis ist es meist umgekehrt: Abgesehen von trivialen
Mini-Funktionen gibt es einen umfangreichen Kontext (was äquivalent zu
Ein- und Ausgaben ist) und einfache, aber viele Abhängigkeiten. Und je
mehr man die Abhängigkeiten zerfasert, umso eher sind Kontrollfluss und
Kontext futsch (hidden), geopfert einer Testbarkeit bedeutungsloser,
sinnentstellter Partikel.
A. S. schrieb:> Wo TDD richtig gut ist: komplexe Funktionen mit wenigen Ein- und> Ausgaben. Standard-Beispiel sind Mathematische Funktionen, z.B. sin oder> sqrt: Zwei Zahlen, komplexer Code, Sonderbehandlungen (NaN und so), aber> sehr genau in wenigen Sätzen formulierbar, was passieren soll.
Das hört sich super an, ist allerdings nie so einfach. Man kann ja nicht
für jeden der 2^64 möglichen Eingangswerten der sin-Funktion testen, ob
das Ergebnis stimmt.
Softwaretest ist eine Disziplin für sich und das Thema ist viel zu breit
um es mit ein paar wie den oben genannten Plattitüden zu erschlagen
(Testarten, Testlevel, Testziele, Teststrategien, ...), z.B.:
F. B. schrieb:> Für jede Codeänderung müssen auch die Tests nachgezogen> werden.
Tja damit hat man schon den ersten Smell aufgedeckt, wenn das der Fall.
Klingt nach zu viel WhiteBox und zu wenig BlackBox Tests und/oder sich
ständig ändernden Interfaces / Requirements.
Dann werden quasi Unittests gleich gesetzt mit Klassentests, siehe:
A. S. schrieb:> Und je> mehr man die Abhängigkeiten zerfasert, umso eher sind Kontrollfluss und> Kontext futsch (hidden), geopfert einer Testbarkeit bedeutungsloser,> sinnentstellter Partikel.A. S. schrieb:> In der Praxis ist es meist umgekehrt: Abgesehen von trivialen> Mini-Funktionen gibt es einen umfangreichen Kontext (was äquivalent zu> Ein- und Ausgaben ist) und einfache, aber viele Abhängigkeiten.
Klingt nach einer suboptimalen Architektur, wenn man ständig viele
kleine Abhängigkeiten hat. Kopplung <-> Kohäsion; dagegen helfen
Domänenmodellansätze, um die Software zu konzipieren.
Aber wenn ich hier manche Aussagen so lese, glaube ich, dass ich noch
lange Arbeit haben werde :-)
F. B. schrieb:> Es gibt nur wenige Ausnahmen, in> denen Softwaretests Sinn machen und Zeit sparen. Z.B. wenn das manuelle> Testen sehr komplex, aufwendig und fehleranfällig ist. Oder wenn man nur> Backend programmiert und wegen fehlender UI keine manuellen Tests> möglich sind.
Mein kompletter Beruf besteht aus "wenige Ausnahmen": Echtzeit Embedded
Software und FPGA Entwicklung. Kein UI, manuelles testen ist Aufwändig,
Error Injection im echten System unzulässig (wir wollen ja nicht jedes
mal destruktive Tests machen...)
A. S. schrieb:> In der Praxis ist es meist umgekehrt: Abgesehen von trivialen> Mini-Funktionen gibt es einen umfangreichen Kontext (was äquivalent zu> Ein- und Ausgaben ist) und einfache, aber viele Abhängigkeiten. Und je> mehr man die Abhängigkeiten zerfasert, umso eher sind Kontrollfluss und> Kontext futsch (hidden), geopfert einer Testbarkeit bedeutungsloser,> sinnentstellter Partikel.mh schrieb:> Das hört sich super an, ist allerdings nie so einfach. Man kann ja nicht> für jeden der 2^64 möglichen Eingangswerten der sin-Funktion testen, ob> das Ergebnis stimmt.
Ich gebe euch beiden absolut recht. Es ist nicht einfach.
Ich bin da Pragmatisch, ob test-driven-development (TDD),
defect-driven-development (DDD), pair-programming, formale methoden,
agile, XP etc. sind alles Ideen/Methoden/Ansätze und ich nehme mir das
heraus, das gerade zum Projekt, Technologie und Team passt.
F. B. schrieb:> Von diesem ganzen Humbug,> automatisierte Softwaretests würden Zeit sparen, will ich erst gar nicht> anfangen. Für jede Codeänderung müssen auch die Tests nachgezogen> werden. Also jedes Mal doppelte Arbeit.
Wenn es uns Entwicklern Zeit spart ist es optimal gelaufen. Wenn es
unseren Kunden Zeit spart oder Schaden verhindert, dann ist der
eigentliche Zweck vom Testen (automatisiert und manuell) erfüllt.
Generell geht es ja darum Software Entwicklung als Ingenieurhandwerk zu
verstehen und zu betreiben.
Und zum Thema:
Wir setzen auch punktuell Pair Programming und auch andere Technik ein,
immer wenn wir der Meinung sind, dass es sinnvoll ist.
Z.B. im Multiprozess / Multithreadumfeld und zugehörige Tests,
verallgemeinert, bei nicht-trivialen Themen, die Auswirkungen auf
mehrere Bereiche der Software haben können und sich Fehler nicht nur
lokal innerhalb einer Komponente auswirken können.
Wieviel Aufmerksamkeit man dem Thema Test widmet hängt stark vom Umfeld
der Software und des Wartungszyklus ab.
Um mal zwei Extreme herauszugreifen:
Mobile-App mit einer Gesamtlebensdauer von vllt. 1-2 Jahren, die von
einem Entwickler erstellt wird, braucht kein so ausgefeiltes Testnetz,
wie eine Software mit einer Lebensdauer von 15-20 Jahren im
Medizinbereich an der ~200 Entwickler tagtäglich arbeiten, ...
Gut benamte / strukturierte Tests helfen allerdings sehr, sich in eine
Fremdkomponente schneller einzuarbeiten und erspart unnötige Detaildoku,
die sowieso sofort veraltet, da nicht gepflegt.
Medizintechnik schrieb:> Softwaretest ist eine Disziplin für sich und das Thema ist viel zu breit> um es mit ein paar wie den oben genannten Plattitüden zu erschlagen> (Testarten, Testlevel, Testziele, Teststrategien, ...), z.B.:
Hier ging es aber nur um Tests als Allheilmittel.
P. P. schrieb:> Auch finde ich Code-Review eigentlich nur eine Strafarbeit. Das kann> jeder Entwickler selber besser abdecken, wenn er Tests für seinen Code> schreibt.
Die Code-Qualität eines Entwicklers wird sich nicht ändern, wenn er für
jede Zeile Code 2 Zeilen Test selbst schreibt. (mit 1:2 als typischem
Verhältnis).
A. S. schrieb:> Hier ging es aber nur um Tests als Allheilmittel.
Naja komm sind wir ehrlich. Jeder der irgendeine Technik in Bezug auf
Software als Allheilmittel anpreist, kann direkt unter "nicht ernst zu
nehmen" eingetütet werden, oder nicht?
TDD steht für "Test Driven Design", man schreibt genau soviel test code,
damit dieser fehlschlägt und man genau so viel prod code schreibt damit
der Test durchgeht, nicht mehr.
Damit kann man eben das Design des Codes minimal auslegen, eben nur das
was man wirklich braucht.
Ist schon eine Umstellung wenn man gewöhnt ist sich zuerst die Lösung zu
überlegen, das macht man bei TDD in kleinen Schritten und erst dann wenn
man es braucht.
Bei TDD geht es eben nicht darum, alle möglichen Tests vorher zu haben,
das ist eher "Test First" und hat andere Ziele.
Grundsätzlich müssen bei TDD nicht alle Tests whitebox tests sein, in
der Praxis sind sie das aber weil man damit die schnellste Feedbackloop
hat, es sollte ja innerhalb von einer Minute mehrere Iterationen möglich
sein.
Das Ergebnis sollte der minimale Prod Code sein der die Anforderung
erfüllt und dann auch testbar ist, nicht 100% Testabdeckung oder gar
dass alle Fälle getestet wurden.
A. S. schrieb:> Medizintechnik schrieb:>> Softwaretest ist eine Disziplin für sich und das Thema ist viel zu breit>> um es mit ein paar wie den oben genannten Plattitüden zu erschlagen>> (Testarten, Testlevel, Testziele, Teststrategien, ...), z.B.:>> Hier ging es aber nur um Tests als Allheilmittel.
Sondern? Pairprogramming?
> P. P. schrieb:>> Auch finde ich Code-Review eigentlich nur eine Strafarbeit. Das kann>> jeder Entwickler selber besser abdecken, wenn er Tests für seinen Code>> schreibt.>> Die Code-Qualität eines Entwicklers wird sich nicht ändern, wenn er für> jede Zeile Code 2 Zeilen Test selbst schreibt. (mit 1:2 als typischem> Verhältnis).
Auch erfahrene Entwickler machen bei vermeintlich simplen Anforderungen
Fehler.
In komplexen Umgebungen mit mehr als >>100k Zeilen Code ist
Programmieren ohne strukturierte Tests ein absolutes Tabu. Und
schließlich gibt es mehr als den funktionalen Test des Entwicklers…
(Prozesstest, Integrationstest, …)