Ich arbeite seit über 10 Jahren in der Softwareentwicklung und es wird mir klar, dass ich selten etwas "Neues" erschaffe. Mir ist klar, dass "neu" ein vager Begriff ist, aber ich würde ihn als alles definieren, von einem offensichtlichen neuen Großprojekt bis zu einem neuen großen Feature in einem vorhandenen Projekt (sagen Sie etwas, das einige Überlegungen in seinem Design erfordert, und das könnte dauert 2 Wochen oder länger). Vielleicht ist eine grobe Richtlinie etwas Neues, wenn eine schriftliche Spezifikation erforderlich ist. Ich denke, die meisten Programmierer wissen, wovon ich spreche - Sie sind in der Zone und schreiben eine Tonne Code in einem schnellen Tempo.
Wenn ich an meine Arbeit zurückdenke, würde ich davon ausgehen, dass weniger als 10% meiner Zeit für "neue" Arbeiten aufgewendet werden. Es gibt Dinge wie "das vorhandene System für die Arbeit in dieser neuen Umgebung anpassen", die sicherlich viel Planung erfordern, aber das eigentliche Codieren und "neue Dinge" führen dazu, dass an vielen Stellen im gesamten Code geringfügige Änderungen vorgenommen werden. Ebenso bei kleinen Feature-Anfragen - wenn ich weiß, was zu tun ist, sind diese oft in weniger als einer Stunde erledigt. Wenn ich das nicht tue, muss ich nur viel Code lesen und herausfinden, was zu tun ist (was mich frustriert, weil ich lerne) viel besser machen, nicht lesen).
Im Allgemeinen habe ich das Gefühl, dass ich die meiste Zeit nichts wirklich erschaffe. Ich ging davon aus, dass dies an den meisten Stellen der Fall war - ein neues Produkt würde ziemlich schnell herauskommen und an diesem Punkt würden alle aufgeregt sein und den Code in einem schnellen Tempo raushauen, aber dann, wenn es live ist, wird es in den Wartungsmodus versetzt, wo Einige der nachfolgenden Änderungen würden als "neu und kreativ" eingestuft.
Liege ich falsch? Beschreibe ich die meisten Programmierjobs genau oder haben die meisten Programmierer das Gefühl, häufig neue Dinge zu erschaffen?
Antworten:
Ein großer Teil der Software-Arbeit ist die Wartung. Das wird Ihnen natürlich kein Personalchef sagen, aber das ist auf jeden Fall der Fall.
quelle
Ja, deine Wahrnehmung ist korrekt. Es ist eine absolute Binsenweisheit, dass viel mehr Zeit, Geld und Aufwand für die Wartung von Systemen aufgewendet wird als für die Erstellung neuer Systeme. Die Zeitzuweisung der meisten Programmierer wird dies offensichtlich widerspiegeln.
Ein Grund dafür ist, dass viele Leute, wenn sie "neu & kreativ" werden, es schlecht machen, so dass die Wartung des Systems schwierig ist (dies ist besonders wahrscheinlich, wenn sie noch nie selbst gewartet haben - Niemand, der ständig an kleinen Projekten auf der grünen Wiese gearbeitet hat, kann wirklich von sich behaupten, kompetent zu sein.
Ein weiterer (wahrscheinlich größerer) Grund ist, dass die meisten Systeme so konzipiert sind, dass sie nicht nur für eine einmalige Veranstaltung von Nutzen sind. Sie gewöhnen sich also viel länger daran, als es nötig war, sie zu entwickeln. In dieser Zeit ändern sich die Anforderungen (und werden ergänzt) aufgrund von Änderungen in der Gesetzgebung, auf dem Markt, in der Forschung, bei den Anwendern, was auch immer. Und das bedeutet Wartungsarbeiten.
quelle
Legacy-Systeme sind die erfolgreichen. Sie haben den anfänglichen Entwicklungsprozess überstanden, bei dem 50% der Projekte scheitern (auch wenn der Erfolg neu definiert wurde!). Sie überlebten ein sich veränderndes Geschäftsumfeld. Sie überlebten wahrscheinlich zehn Vorschläge von jungen naiven Programmierern, das Ganze in Java oder was auch immer zu der Zeit im Trend war, neu zu schreiben. Sie hatten das Glück, dass jede Abteilung, Firma oder Agentur, die die Software bediente, die verschiedenen Budgetkürzungen, Umstrukturierungen, Fusionen usw. überlebte.
Wahrscheinlich werden weniger als 5% der geschriebenen Software noch zehn Jahre später ausgeführt.
Anstatt darüber zu jammern, ist es ein Privileg, an einer solchen darwinistischen Erfolgsgeschichte zu arbeiten und zu erfahren, was in der realen Welt funktioniert und warum.
quelle
Der Begriff, der häufig für neue Projekte verwendet wird, die nicht von einer älteren Entwicklung abhängig sind, ist greenfield project . Möglicherweise wird der Begriff gelegentlich in Stellenausschreibungen angezeigt. Wenn Sie wissen, dass Sie bei Null anfangen müssen, anstatt das gescheiterte Unterfangen eines anderen zu erben, kann dies einen Job attraktiver machen.
Erfolgreiche Softwareprojekte verbringen im Allgemeinen viel mehr Zeit damit, gewartet zu werden, als wenn sie als neue Projekte erstellt werden. Es ist also nicht verwunderlich, dass Sie nicht viele völlig "neue" Aufgaben erledigen müssen.
Es ist auch eine Menge Arbeit , etwas völlig Neues zu erschaffen . Selbst in einem Greenfield-Projekt werden Sie wahrscheinlich eine Reihe von Tools auswählen, die Ihnen helfen: Plattform, Compiler, Frameworks, Bibliotheken usw. Sobald Sie diese Auswahl treffen, haben Sie Ihrem Projekt bestimmte Einschränkungen auferlegt. Das heißt nicht, dass Sie keine neue Arbeit mehr machen, nur, dass "neu" hier ein relativer Begriff ist. Von da an ist es kein großer Schritt, ein Feature oder Modul zu einem vorhandenen Projekt als "neu" hinzuzufügen, auch wenn Sie es nicht als Greenfield-Projekt bezeichnen würden.
quelle
Es hängt davon ab, welche Arbeit Sie suchen.
Ich habe nur einmal für eine reine Softwareproduktfirma gearbeitet, bei der ich in einem kleinen Start-up-Team an ihrer einzigen vergoldeten Anwendung gearbeitet habe.
Ansonsten habe ich für Technologieunternehmen gearbeitet, die Software zur Unterstützung ihrer internen F & E- oder externen Produkte benötigten.
Der Vorteil ist, dass ich komplette Start-Ziel-Produkte bauen und so ziemlich alles bauen kann, was ich will. Manchmal können Sie auch neuere Technologien ausprobieren, als wenn Sie nicht in der Lage wären, einer bestehenden marktführenden Anwendung Funktionen hinzuzufügen.
Der Nachteil ist, dass Sie Teil der Kosten sind, nicht Teil des Produkts. Ich hatte Projekte in der Dose, weil "wir keine Software machen" / "Software ist nicht das Kerngeschäft" = Es ist erstaunlich, wie Unternehmen glauben, sie könnten eine 100-K-Werkzeugmaschine ohne Software verkaufen, um sie zu betreiben!
quelle
Anstatt zu sehen, dass Legacy-Code das Chaos anderer ständig aufräumt, sehen Sie ihn als Gelegenheit, an vielen neuen Projekten zu arbeiten.
Denken Sie darüber nach, jede neue Funktion, die einem System hinzugefügt wird, ist ein kleines Projekt für sich. Sie müssen weiterhin den gesamten SDLC anwenden, um sicherzustellen, dass Sie den Auftrag ordnungsgemäß ausgeführt haben. Sicher, Sie erhalten wahrscheinlich eine Spezifikation für das Feature, aber normalerweise wurden die Details nicht berücksichtigt. Es liegt also an Ihnen, das Problem wie gezeigt zu analysieren, die beste Methode zu entwerfen, um die Änderung anzuwenden, zu testen und zu codieren. und geben Sie es dann an Ihr Versionskontrollsystem zurück und warten Sie es möglicherweise in Zukunft.
Ich habe die Erfahrung gemacht, dass Sie nicht oft auf einer völlig grünen Wiese arbeiten. Wenn Sie das Glück haben, wird von Ihnen erwartet, dass Sie das Projekt zu einem guten Teil warten und vielleicht sogar für die Lebensdauer des Produkts oder für die gesamte Zeit, die Sie bei einem bestimmten Arbeitgeber sind. Dies liegt daran, dass Sie aufgrund Ihrer intimen Erfahrung mit einem Produkt zu einem Wissensspeicher werden und es als kostspielig angesehen werden kann, sich anderen Dingen zuzuwenden. Wenn Sie mit einem vorhandenen Produkt beginnen, liegt dies daran, dass der Arbeitgeber kürzlich eine Ressource verloren hat oder mehr Ressourcen für das Projekt benötigt, und das Unternehmen muss sicherstellen, dass es keinen allzu großen Verlust bei der Investition in seine Software macht . Das ist die Realität eines Software-Ingenieurs.
Ich habe fast 22 Jahre in der IT gearbeitet, die letzten 15 Jahre als Softwareentwickler. In dieser Zeit habe ich nur etwa 5 neue Produkte entwickelt. Die meiste Zeit habe ich diese Produkte entweder langfristig gewartet oder die anderer gewartet Produkt. Jedes hat mir Herausforderungen und Probleme gestellt, die es zu lösen gilt, und jedes wurde nicht nur als ein großes Projekt behandelt, an dem ich nur beteiligt bin, sondern auch als eine GROSSE Reihe von Mikroprojekten, die es abzuschließen gilt.
Es ist erstaunlich, wie ein bisschen Geisteskrankheit Ihre Wahrnehmung und Freude an der täglichen Arbeit, die Sie tun, total verändern kann. ;-)
quelle
Ich denke, viele Softwareentwicklungsaufgaben beinhalten die Verbesserung eines vorhandenen Produkts oder die Anpassung des vorhandenen Codes an einen neuen Kunden oder Markt.
Dies ist nicht wirklich "Wartung". Zum Beispiel hat VMWare gerade Version 8 veröffentlicht. Dies ist ein wichtiges Upgrade für das Hauptprodukt. Ich vermute, einige der Entwickler, die diese Arbeit geleistet haben, waren dort, als die erste Codezeile für VMWare geschrieben wurde. Sie bauten ihr größeres Upgrade auf dem Code auf, der von Leuten geschrieben wurde, die längst weitergezogen sind.
In der Workplace Beta gibt es eine Frage zur Funktionsweise von Googles 20% persönlichem Projektsystem .
Ich bin mir sicher, dass Google herausgefunden hat, dass die besten Entwickler bei der Entwicklung neuer Softwareprodukte dabei sein wollen, und dass es im Laufe der Jahre müde werden wird, kleine Funktionen hinzuzufügen und Gui's für die nächste Veröffentlichung zu optimieren.
Mit den 20% Projekten spekuliere ich, dass es Google-Entwicklern nichts ausmacht, die Projekte von Google zu verbessern, da er oder sie immer noch den Spaß haben kann, am Anfang von etwas Neuem dabei zu sein.
quelle
Sie verbringen Ihre Zeit damit, neue Funktionen zu erstellen und die Funktionen des vorhandenen Codes zu ändern, um die neuen Spezifikationen zu erfüllen.
Andere nennen das Wartung, aber das ist ein schrecklicher Begriff. Es handelt sich um ein Redesign und ein Refactoring oder Re-Coding der Software, um sie an eine neue Idee des Programms anzupassen.
quelle
Ich würde sagen, es hängt von der Firma ab, für die Sie arbeiten.
Mein erster Job war eine Buchhaltungssoftware-Firma, deren Hauptprodukt ein ERP-System war, das in etwa auf dem gleichen Niveau wie Great Plains oder Peachtree konkurrierte (wie Sie es von QuickBooks gewohnt waren oder seitwärts, als Sie das verschleierte Schema von GP oder was auch immer satt hatten) Sie dachten, mit PT liege etwas nicht in Ordnung, dann sind Sie in ein Paket wie SAP aufgestiegen. Diese Aufgabe bestand zu 99,99% aus Wartung, dh Beheben von Fehlern und Hinzufügen von "kleinen Dingen", ohne die Funktionsweise oder die Funktionsweise der Software grundlegend zu ändern. Ich verließ das Unternehmen, als der CEO eine Neufassung des Systems durchführen wollte, was cool gewesen wäre, wenn er nicht auf mehreren Designmerkmalen bestanden hätte, die klare Anti-Muster wie die innere Plattform (die ein hohes Maß an Anpassung zuließen) des Programms, indem Sie dem Kunden im Grunde einen heruntergekommenen VS-Designer geben,
Mein nächster Job danach war eine Vertragsfirma, die "schlüsselfertige Entwicklung" durchführte; Das vom Kunden spezifizierte System wurde von Grund auf aus Hard- und Software aufgebaut. Nach Abschluss des Projekts wurde alles dem Kunden übergeben, der es entweder selbst warten oder die Dienste des Unternehmens gegen eine monatliche Gebühr behalten konnte. Meine Aufgabe bestand in der Entwicklung eines dieser großen Projekte. Während ich dort arbeitete, existierte so ziemlich alles, was ich getan hatte, nicht, bevor ich anfing. Selbst dann ist die Entwicklung von Natur aus iterativ. Sie fügen immer das hinzu, was Sie bereits haben (auch wenn das, was Sie haben, nichts ist), und Sie müssen Regressionsprobleme vermeiden und beheben (neue Dinge brechen alte Dinge). Und sobald das Projekt in den Status "Garantie" versetzt wurde,
Meine derzeitige Aufgabe besteht in der internen Entwicklung eines Sicherheitsunternehmens, das mithilfe von Videoüberwachung und Audio-Feedback die Überprüfung von Alarmsignalen und andere "virtuelle Wachdienste" durchführt. Dieses Feld wächst schnell und entwickelt sich weiter. Ständig kommen neue Geräte auf den Markt, neue Kunden sollen neue Aufgaben übernehmen, und bestehende Produkte erfüllen nicht mehr die Anforderungen von UL und behördlichen Vorschriften. 99% dieser Arbeit ist "Integration"; Schreiben neuer Software, die es noch nie gab, damit ein neues, aber bereits vorhandenes Gerät oder eine Software mit einem anderen, wahrscheinlich älteren, bereits vorhandenen Gerät oder einer Software zusammenarbeitet, sodass wir mit beiden neue Dinge tun können.
quelle
Ich würde sagen, es hängt sehr von der Art Ihrer Rolle ab.
Ich bin Teil eines kleinen Teams und muss daher alles, was ich erschaffe, pflegen und unterstützen.
Vor 5 Jahren war das meiste, was ich getan habe, "neu" - jetzt würde ich sagen, dass die Wartung von vorhandenem Code mindestens die Hälfte meiner Zeit in Anspruch nimmt, wobei weitere 25% "neue" Versionen vorhandener Systeme sind.
Wenn Sie jedoch ausschließlich als Entwickler mit einem Team zusammengearbeitet haben, um die Wartung und den Support zu übernehmen, nachdem Sie Ihren Code veröffentlicht haben, wäre technisch alles "neu". Wenn Sie einen Job finden, bei dem es nicht erforderlich ist, Ihren eigenen Code zu pflegen, nehmen Sie ihn!
quelle
Es kommt darauf an, wie gefährlich deine berufliche Position ist: ;-)
Wenn Sie für ein neues Unternehmen arbeiten, das neue Produkte mit einem hohen Überlebensrisiko entwickelt, werden Sie wahrscheinlich einige großartige neue Produkte entwickeln.
Wenn Sie für ein altes Unternehmen arbeiten, das eine stabile Position auf dem Markt hat, ist es wahrscheinlicher, dass Sie im Wartungsmodus codieren ;-).
Die Erstellung neuer Software ist immer sehr verlockend . Die Wahrheit ist, dass es schwierig ist, dies richtig zu machen . Das Ausführen von wartbarem Code ist keine triviale Aufgabe.
Wenn Sie über diese Vielzahl von Aspekten nachdenken, müssen Sie sicherstellen, dass Sie guten Code schreiben: ordnungsgemäße Protokollierung, ordnungsgemäße Überwachung und Erfassung von Statistiken, effizientes beschreibendes Design, das es auch unbekannten Personen ermöglicht, in Ihr Projekt involviert zu werden, automatische Tests und testgetriebene Entwicklungen zu dokumentieren.
Nicht viele Leute machen es richtig, also müssen wir ihren Code beibehalten und ihn auf den richtigen Stand bringen. ;-)
Die gute Nachricht ist, wenn Sie lange genug im Unternehmen sind, können Sie beeinflussen, wie neuer Code geschrieben wird :-)
quelle
Ob Sie hauptsächlich Wartungsarbeiten durchführen oder nicht, liegt zumindest teilweise in Ihrer Hand. In meinem Fall war der Großteil meiner Arbeit in den letzten 15 Jahren eine Neuentwicklung. Das liegt daran, dass ich Jobs suche, bei denen ich mich weiterentwickeln kann. Ich bin kein Auftragnehmer und ich mache im Allgemeinen keine Webentwicklung. Ich habe fast immer für kleine Arbeitgeber gearbeitet und arbeite normalerweise in Nischenbereichen (Desktop-GUI-Entwicklung, QA-Tools, Entwicklertools, vertikale Märkte).
Ich habe auch aus erster Hand gesehen und erlebt, dass die besten Programmierer in einem Team normalerweise (wenn auch nicht immer) die besten Jobs bekommen. Wenn Sie sich also darauf konzentrieren, der beste Programmierer in Ihrem Unternehmen zu sein, werden Sie feststellen, dass neue Entwicklungen auf Sie zukommen.
quelle
Wartungsentwicklung ist eine schwierige Aufgabe, in vielerlei Hinsicht schwieriger als Neuentwicklung. Meiner Erfahrung nach halten Arbeitgeber einen Entwickler gerne am Warten, besonders wenn er gut darin ist. Es ist schwieriger, gute Wartungsentwickler für ältere Technologien zu finden, als jemanden zu finden, der mit den neuesten Technologien arbeiten kann.
Ich habe in einem Unternehmen gearbeitet, das in ein Produktteam aufgeteilt war, das ausschließlich für die Wartung zuständig war, und in ein Projektteam, das ausschließlich für die Neuentwicklung zuständig war. Auf beiden Seiten gab es großartige Entwickler, aber die Wartungsmitarbeiter waren definitiv spezialisierter und verwendeten ältere Technologien.
Könnte ich einen Vorschlag machen, den Sie zurückschieben und um neue Entwicklungsarbeit bitten? Und wenn Ihr Arbeitgeber nur Wartungsarbeiten durchführt, müssen Sie dann vielleicht weitermachen?
quelle
Ich würde sagen, dass es von vielen Faktoren abhängt. Wo arbeiten Sie, welche Art von Produkten stellen Sie her, wie ist Ihr Team organisiert usw.
In den vier Jahren, die ich in meiner Firma gearbeitet habe, verbringe ich 70-80% meiner Zeit damit, etwas Neues zu schaffen. Wahrscheinlich werden 50-60% davon für große Projekte ausgegeben, bei denen es sich um völlig neuen Code handelt, während der Rest dieser Zeit für Verbesserungen der aktuellen Funktionalität aufgewendet wird.
Ich weiß auch, wie meine Firma funktioniert. Nicht jeder in meinem Entwicklungsteam verbringt so viel Zeit damit, neue Funktionen zu entwickeln. Es gibt eine Reihe, die sich auf nichts anderes als die Behebung / Jagd von Fehlern konzentrieren. Wenn es sich um eine brandneue Funktion handelt oder wenn sie Hilfe benötigen, muss ich sie untersuchen. Im Allgemeinen ist es jedoch das kleine Team von Bugsuchern, das es der größeren Gruppe von Entwicklern ermöglicht, ohne Unterbrechung weiterzumachen.
quelle
Ich arbeite seit fast drei Jahren als einziger Entwickler in einem Unternehmen, das QuickBooks und Excel verwendet, und nichts anderes, als ich anfing. Jetzt haben wir eine Windows Forms- Anwendung, ein SharePoint- Setup, SQL Server + -Reports, ein Excel-Add-In und ein Outlook-Add-In.
Erst heute habe ich zum ersten Mal ein Ticketing-System eingerichtet, weil ich nicht mehr in der Lage war, E-Mail-Anfragen mit einer Geschwindigkeit zu verwalten, mit der sich Benutzer nicht mehr beschweren konnten. Dies ist meiner Ansicht nach ein Zeichen dafür, dass ich in den Wartungsmodus eingetreten bin.
Meine früheren Jobs waren eher wie die anderen, aber ich dachte, ich würde meine atypischen Erfahrungen einfließen lassen, nur weil es zeigt, dass man nie weiß, was der nächste Job bringen wird. Ich bin erschöpft, aber die Menge, die ich in diesem Job gelernt habe, hat sich gelohnt.
quelle
Einige größere Unternehmen wie das Unternehmen, für das ich arbeite, haben die Richtlinie, Software nach einigen Jahren außer Betrieb zu setzen, möglicherweise, weil die Entwicklungssprache, in der sie geschrieben wurde, nicht mehr verwendet wird (Delphi?) Oder die Plattform ersetzt wird (Windows XP). oder behördliche Auflagen verlangen es. Beispiel: Zweistufige Programme, die direkt mit einer Datenbank kommunizieren, werden jetzt zu Gunsten von dreistufigen Programmen außer Betrieb genommen, die aus Sicherheitsgründen kerberisierte Verbindungen verwenden.
Benutzer benötigen immer noch diese ursprüngliche Funktionalität, und so wird eine vollständig neue Version entwickelt, die den aktuellen Stand der Technik verwendet.
Erwarten Sie einen Austauschzyklus von 5-7 Jahren für diese Art von Dingen. Zum Beispiel erwarte ich bis 2020, dass die WPF (Client) / Java (Server) -Software, die ich jetzt schreibe, altmodisch ist und durch etwas Neueres ersetzt wird.
quelle