"Programmieren ist besser als Sex"



Zu Beginn meiner Karriere hörte ich diesen Satz vom Leiter der ACS-Abteilung einer der sowjetischen Fabriken, als er anbot, in seiner Abteilung zu arbeiten.

Natürlich habe ich damals nicht gedacht, und jetzt denke ich nicht, dass Programmieren ein Ersatz für guten Sex sein kann. Aber erst nach Jahren konnte er die Tiefe der Emotionen, die er in sein Schlagwort setzte, voll und ganz einschätzen. Einschließlich, weil ich selbst manchmal zitternde Gefühle verspüre, wenn ich die perfekte Architektur oder den schönen Programmcode erstelle. Und obwohl das Konzept der Schönheit für jeden Menschen sein eigenes hat, ist das Verlangen nach Perfektion für alle gleich.

Emotionen sind jedoch eine Sache und der Mann Ingenieur vernünftig, es ist anders. Und ich habe mich schon lange für die Frage interessiert, aber was ist der wahre Grund, warum ich den Code schön machen möchte?

Wer daran interessiert ist, über die Gründe für das Finden des Schönen in der Softwareentwicklung und in anderen technischen Disziplinen nachzudenken, frage ich unter Katze.

Vorwort


Der Anstoß zum Schreiben dieses Artikels war das aktuelle Material über Habr " Hör auf, bereits subjektiv schöne Entscheidungen im Code zu fürchten - du bist kein Roboter ", in dem der Autor versucht, sein intuitives Verlangen nach schönem Code zu untermauern.

Nach den Kommentaren zu diesem Artikel zu urteilen, teilen jedoch nicht alle Leser die Argumente des Autors auf der Ebene des „Engineering Chuyka“. Obwohl es Konsonanten mit einem solchen Argument gibt:
„Natürlich sollte der Code schön sein. Weihnachtsbäume, Stöcke, ALLES im Leben sollte schön sein! Andernfalls, wenn etwas hässlich ist, können Sie Stahlbeton sagen "das ist ein Fehler" (manchmal muss man damit leben, aber es ist ein Fehler!) "
Zwar schlagen andere vor, sich der inneren Stimme zu widersetzen und den Beginn der Behandlung für "pathologischen Perfektionismus, der eine Form von Besessenheit, Zwang oder Zwangsstörung sein kann", nicht zu verzögern.

Aber wenn wir Scherze und Witze verwerfen, dann ist das Phänomen des Verlangens nach Schönheit seit der Antike bemerkt worden und ist keiner der technischen Disziplinen fremd. Schließlich ist es unwahrscheinlich, dass irgendjemand argumentieren wird, dass das Ergebnis der Arbeit eines Architekten oder Ingenieurs bei der Gestaltung von Autos nicht sowohl technische als auch ästhetische Perfektion sein kann.





Für mich ist die Softwareentwicklung jedoch näher, worauf später noch eingegangen wird.

Sakramente des Softwareerstellungsprozesses


Die Softwareentwicklung kann aus verschiedenen Blickwinkeln betrachtet werden. Einerseits ist dies eine rein technische Disziplin, die keine Freiheiten zulässt und auf einem harten und konsequenten Entwicklungsansatz beruht. Dies ist ein seit langem etablierter und debuggter Prozess, der die Erfassung von Anforderungen, die Entwicklung technischer Spezifikationen, die Planung, die Überwachung der Umsetzung von Plänen, die Ausführung der erzielten Ergebnisse usw. umfasst.

Eine weitere Option für die Entwicklung eines Softwareprodukts ist das rücksichtslose Agile, das auf Konventionen spuckt und Kundenwünsche hervorhebt. Er ist bereit, mindestens jede Iteration der Architektur des Softwareprodukts neu zu erstellen, um das gewünschte Ergebnis zu erzielen. Eine solche Methode ähnelt eher der Kunst, ein Gleichgewicht zwischen funktionierender Software und einer völligen Erschöpfung des Vertrauens und der Kundenressourcen zu finden.

Und erst mit der Zeit beginnt man zu verstehen, dass gemeinsame Wahrheiten viel flexibler sind. Und in einem klaren Wasserfall gibt es ein bisschen Flexibilität, und in Agile gibt es Pläne und Fristen. Daher liegt die Wahrheit wie immer irgendwo dazwischen.

All dies gilt jedoch nur für die Außenseite des Arbeitsprozesses. Und das Traurigste ist, dass das Erstellen von schönem Code in keiner Weise davon abhängt.

Darüber hinaus kann derselbe Code gleichzeitig als schön und hässlich erkannt werden! Und das bedeutet, dass die Konzepte der Schönheit rein individuell sind (wer würde daran zweifeln). Was ist schöner Code und wie schreibt man ihn? , Die Ergebnisse des 20. Internationaler Wettbewerb unbekannten Code auf dem C .

Deshalb musste ich tiefer in die Basis dieses Prozesses graben. In Richtung der persönlichen Identität des Entwicklers, die als Programmierer, Architekt, Tester, Analyst oder sogar alle gleichzeitig oder zu verschiedenen Zeitpunkten fungieren kann.

Was treibt diese Zahnräder in kleinen und großen Unternehmen in den seelenlosen Maschinen der Softwareindustrie an?

Natürlich kann die Suche nach einer treibenden Kraft nicht ohne Psychologie auskommen.

Was ist die treibende Kraft?


Nein, ich werde keine wissenschaftlichen Arbeiten über Psychologie oder persönliche Motivation zitieren. Auf Wunsch findet jetzt jeder viele Artikel zu diesen Themen.

Ich war an der Klassifizierung motivierender Gründe interessiert, die Entwickler dazu motivieren, Programmcode zu erstellen. Da die Hoffnung bestand, dass darin der Grund für das Verlangen der Entwickler gefunden werden kann, bewerten Sie die Quelle manchmal unter ästhetischen Gesichtspunkten.

Leider habe ich eine solche Klassifizierung nicht getroffen (vielleicht habe ich sie nicht gefunden oder dort nicht gesucht). Daher habe ich mich aufgrund der Analyse meiner eigenen Erfahrungen und der Kommunikation mit meinen Kollegen entschlossen, die folgenden Motivationsarten für Entwickler mit herkömmlichen Namen unabhängig zu identifizieren: Material , Soziales und Intern .

Materielle Motivation


Diese Art der Motivation basiert auf wirtschaftlichen Anreizen. Dem Entwickler ist es egal, was und wie er schreibt. Er wird versuchen, den genehmigten Codierungsstil im Projekt einzuhalten, und ihm ist die Schönheit des Codes egal. Dementsprechend erfolgt die Bewertung der Arbeitsergebnisse (sowohl der eigenen als auch der Arbeitsergebnisse der Kollegen) unter einem formalisierten Gesichtspunkt, bei dem es keinen Platz für Ästhetik gibt.

Soziale Motivation


In diesem Fall ist das Hauptkriterium für die Bewertung der Arbeitsergebnisse die Meinung des Teams, das Arbeitskollegen, Freunde an der Universität usw. sein kann. Darüber hinaus erfolgt die Bewertung nicht nur nach formalen Kriterien für die Einhaltung des Kodierungsstils. Es gibt bereits eine emotionale Komponente, ein abstraktes Schönheitskriterium.

Und für den Entwickler wird es bereits wichtig, dass das Ergebnis seiner Arbeit zunächst vom Team akzeptiert und genehmigt wird, und materielle Gründe können auf der Strecke bleiben. In den fortgeschrittensten Fällen ist der Entwickler bereit, Code auch „für Lebensmittel“ zu schreiben, um das Selbstwertgefühl der Zielgruppe oder seines sozialen Umfelds zu befriedigen.

Intrinsische Motivation


Eine solche Motivation ist der sozialen sehr ähnlich, nur der Bewertungsfaktor ist nicht das Team, sondern der Entwickler selbst. Mit interner Motivation fehlen materielle Anreize völlig, und das Ergebnis der Arbeit wird möglicherweise überhaupt nicht veröffentlicht, weil Er hat seinem Autor bereits durch die Tatsache seiner Existenz Befriedigung gebracht (oder bringt sie auch weiterhin) und erfordert keine bestätigende Beurteilung von außen.

Natürlich ist eine solche Motivtrennung für Programmierer bedingt und kann von einem Typ zum anderen fließen oder sogar eine Kombination mehrerer Motivationsfaktoren sein.

Wenn Sie jedoch das Ergebnis der Arbeit von Programmierern unter diesem Gesichtspunkt betrachten, können Sie in einem solchen Klassifizierungssystem bereits eine Logik finden und versuchen, Schönheit in fast jedem Quellcode zu finden (Programm aus dem IOCCC- Wettbewerb ):

typedef unsigned char t;t*F="%c",l[]="|\\/=_ \n](.\0(),*(.(=(}*.)[[*.",N='\n',*
r;typedef(*H)();extern H Ar;Q(a){return(a|-a)>>31;}H S(c,a){return(H)(a&~c|(int
)Ar&c);}extern t*ist;V(t*u){*u^=*u&2^(*u>>7)*185;}Z(t*u,t n){*u-=n;}e(t c,H h){
R(h,Q(*                                                                 r^c));}
I(){r=l                                                                 +7-4*Q(
getchar                                                                 ()^*l);
}R(H h,                int                                              c){Ar=S
(c,h);-                main()                                           ;}P(){r
++;}z()                {                                                O(&N);}
O(t*c){                    printf(                                      F,+*c);
}T(){r=                        "This is not a function\n"               ;}w(U){
U=Z(r,8                    );                                           r-=~Q(*
r/8-4);	                   return 0;                                    }M(){r=
ist-68;                }                                                h(){t G
=r[1]-r                                                                 [2]^*r;
G^=30;V                                                                 (&G);e(
0,(O(&G                                                                 ),P(P(*
r++)),z));}g(){M();R(h,0);}f(){P(O(r));e('f',g);}p(){P();e('a',f);}d(){P(O(r));
e('n',p);}c(u){u=r[-2];T(Ar=d);R(f,Q(u^'"'));}n(){e(w(O(l+*r%8)),c);}a(){I();R(
n,0);}main(){S(Q(Ar),a)();}H              Ar;t*ist="Rene Magritte"-(1898-1967);

Wenn ein Witz zum Nachdenken anregt


Ursprünglich wurde dieser Artikel als Scherz geschrieben, und sein Name spricht für sich selbst, daher wurde das Bild entsprechend ausgewählt.

Stellen Sie sich meine Überraschung vor, als mir klar wurde, dass die formulierte Klassifizierung von Motiven für das Verlangen nach Programmierern nach Schönheit mich sehr an etwas erinnert. Diese Motive werden sehr deutlich auf Maslows berühmte Bedürfnispyramide projiziert.



Die materielle Motivation schließt die Notwendigkeit der Gründung der Pyramide. Dies sind physiologische und Sicherheitsbedürfnisse. Die soziale Motivation liegt in der Mitte der Pyramide und führt zur Befriedigung der Bedürfnisse nach Zugehörigkeit, Liebe und Anerkennung. Und schließlich die intrinsische Motivation sehr klar auf die Spitze der Pyramide projiziert und schließt das Bedürfnis nach Wissen, Ästhetik und Selbstverwirklichung.

Ist das nicht ein Witz?


Als Ergebnis eines nicht ernsthaften Versuchs, das Verlangen der Programmierer nach Schönheit zu untersuchen, wurden durchaus vernünftige Schlussfolgerungen gezogen, die auf Wunsch in der Softwareentwicklungsbranche verwendet werden können.

In der Tat wird es im Falle der Entstehung einer echten Methode zur Bewertung der Schönheit eines Codes unter dem Gesichtspunkt der Motivation nicht schwierig sein, sie verschiedenen Dienstprogrammen zur Bewertung des Codierungsstils wie Pylint, Cpplint und anderen Flusen hinzuzufügen. Danach ist es möglich, die Motivation bestimmter Entwickler zu bewerten, ohne psychologische Tests durchzuführen und langweilige Fragebögen auszufüllen. Es reicht aus, den Code durch den Analysator zu leiten.

Vielleicht habe ich sogar den Geist aus der Flasche gelassen, weil Wenn es möglich wird, die Motivation anhand des erstellten Codes zu messen, ist der nächste natürliche Schritt der Übergang zu seiner Verwaltung. In der Tat ist diese Methode zur Bewertung der Motivation sehr einfach zu automatisieren, und wo die Möglichkeit zur betrieblichen Messung besteht, besteht auch die Möglichkeit zur betrieblichen Verwaltung des gemessenen Parameters.

Mit anderen Worten: Wenn Projektmanager über aktuelle Informationen zum mentalen Zustand der Teammitglieder verfügen, können sie die Ergebnisse von Versuchen bewerten, die Motivation auf soziale oder interne Motive zu verlagern, um natürlich wirtschaftliche Anreize zu sparen. ;-)

UPDATE 1: Ich werde einen Link zur Skizze von hinterlassenjanvarevzum Thema des Artikels: Sergey und „Programmieren ist besser als Sex“

UPDATE 2:
Nach den ersten Abstimmungsergebnissen bestand die Tendenz, hauptsächlich für die intrinsische Motivation zu stimmen (145 - 60,3%). Bevor Sie sich jedoch für die dritte Option bei der Abstimmung entscheiden, sollten Sie Folgendes berücksichtigen: Wer legt die Kriterien für Qualität (oder Ästhetik) in Ihrem Projekt fest?

Wenn Sie ein Teamleiter, Architekt oder eine andere Person sind, die die Regeln für die Festlegung einer solchen Bewertung akzeptiert oder maßgeblich beeinflusst, ist Ihre Wahl die richtige.

Wenn Ihr Beitrag zur Bildung von Codequalitätskriterien jedoch unbedeutend ist (z. B. wurden solche Kriterien bereits vor Ihrem Beitritt zum Projekt festgelegt), aber alles vollständig zu Ihnen passt, sind Sie höchstwahrscheinlich im Einklang mit der internen und sozialen Motivation, aber wenn Sie interviewt werden, haben Sie die richtige Wahl für die zweite Option stimmen, d.h. soziale Motivation.

Um dies eindeutig zu überprüfen, stellen Sie sich eine Situation vor, in der Sie eine schlechte "schwarze" Stimmung haben und das Ergebnis der Arbeit (der zu diesem Zeitpunkt geschriebene Programmcode) dieser entspricht. Wird Ihr Commit genehmigt? Wenn ja, auch wenn Sie die akzeptierten Qualitätskriterien nicht vollständig erfüllen, ist Ihre Motivation wirklich intern. Aber wenn Ihr Code abgelehnt wird, ist Ihre Motivation immer noch sozial, obwohl sie normalerweise im Einklang mit dem Inneren steht.

All Articles