Unterschied Hobby-Programmierer und Professioneller Softwareentwickler

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Professionelle Softwre-Entwickler planen ihre Software und hacken nicht drauf los. Dazu gibts Vorgehensmodelle wie das V-Modell, das Wasserfall-Modell, das Spiral-Modell, eXtreme Programming oder SCRUM. Die Modelle haben alle ihre Vor- und Nachteile. Letztendlich gehts darum das richtige Maß an Flexibilität und Planungsdetails zu finden. Plant man alles vorher bis ins kleinste Detail, ist man unflexibel wenn plötzlich eine Änderung auftritt (und das passiert sehr häufig bei Kundenaufträgen).

Bei der Programmierung muss man besonders auf verschiedene Dinge achten:

  • Sicherheit - Die SW wird von Kunden produktiv genutzt, sollte also möglichst keine Sicherheitslücken enthalten
  • Stabilität - Die SW muss stabil laufen und braucht ein zuverlässiges Wiederanlaufmanagement (bei einem Absturz dürfen keine Daten korrupt werden)
  • keine Memory-Leaks - Die SW wird u.U. im 24h-Betrieb oder lange am Stück laufen. Wenn durch schlampige Programmierung ständig neuer Arbeitsspeicher allokiert wird (Objekte die nicht mehr gebraucht werden werden nicht gelöscht, aber trotzdem neue angelegt), wächst der RAM-Verbrauch kontinuierlich was ständige Neustarts erfordert
  • Gutes SW-Design - Die geplante SW sollte möglichst hohe Kohäsion und möglichst geringe Kopplung aufweisen. Beides verkompliziert die Wartung und Erweiterbarkeit der Software. Das kann soweit führen, dass irgendwann keiner mehr durchblickt und man es nicht schafft die Software auszubauen (scheinbar jede Änderung hat Seiteneffekte)
  • ausgiebige Tests - in der professionellen SW-Entwicklung werden automatisierte Tests angelegt, damit man bei einer Änderung der Software per Knopfdruck feststellen kann ob durch die Änderung hinter etwas nicht mehr so funktioniert wie es soll (das lohnt sich, macht aber auch viel Arbeit)
  • Programmierrichtlinien - Bei größeren Projekten wird oftmals detailliert vorgeschrieben wie Quellcode auszusehen hat. Das kann soweit gehen, dass selbst vorgeschrieben ist, wo überall Leerzeichen, Tabs, Leerzeilen und sonstige Einrückungen sind. Aber auch Benennungen von Variablen, setzen von Klammern. Das dient dazu das jedes Mitglied des Entwicklungsteams auf die gleiche Weise arbeitet und jeder möglichst mit dem Code der anderen zurecht kommt

Also, zwischen dem Hobby-Entwickler, der sich mit Pizza und Cola die Nacht um die Ohren schlägt um ein Tool zu basteln und dem professionellen Software-Entwickler aus einem Systemhaus liegen schon Welten. Trotzdem sinds oft diese Hobbyentwickler die sich dort hin entwickeln, da sie die Leidenschaft mitbringen die diese Arbeit erfordert

Der größte Unterschied ist wahrscheinlich die Bürokratie. Wenn du mit der Softwareentwicklung deine Brötchen verdienst, dann geschieht dies meist in Form von Aufträgen von Kunden. Die haben meist irgendein System oder irgendwelche Daten, eine Datenbank oder was auch immer, womit du arbeiten musst.

Dafür müssen Schnittstellen definiert werden, wer wem was liefert, wie das alles auszusehen hat und zu funktionieren hat, bis die Umsetzung fertig ist stellt man ca. 20 mal fest, dass man aneinander vorbeigeredet hat.

Auch müssen professionelle Anwendungen oft einige andere Merkmale aufweisen, wenn es z.B. um Themen geht wie Sicherheit, Rückverfolgbarkeit, Wiederherstellung usw.

Daneben programmieren Hobbyprogrammierer oft kleinen kram alleine, wenn der Code aber über 4-5 Leute weitergereicht wird usw. dann muss eben auch auf Sachen geachtet werden, sie Sachen vernünftig zu kommentieren. Meist gibt es auch Testumgebungen und co. während ein Hobbyprogrammierer auch mal fix am Produktivsystem rumwurstelt.

Wenn ich das bei unseren Kunden mach, ein kleinen Fehler einbau den ich aus irgendeinen Grund nicht fix finde oder die VPN Verbindung aus irgendeinen Grund dann mal nicht hinhaut und die Sachen ne Stunde stehen, dann kommt es eben zu Verlusten im 4 bis 6-stelligen Bereich. Dann hast du quasi 4 verschiedene Personen am Telefon, während du probierst das Problem in den Griff zu bekommen.

Außerdem ist der Kunde natürlich König. Wenn er im Lagerbereich z.B. mit alten 300 MHz Terminals arbeitet, die CE 5.0 oder CE 6.0 laufen haben, dann muss man sich eben mit den Internet Explorer 6 abplagen mit all seinen Eigenheiten und Aufgrund der Leistung sein System in der Optik und co. ziemlich kastrieren.

Trial and Error gibt es natürlich trotzdem noch. Die größten Änderungen zwischen der Zeit wo ich gelernt hab und nun wo ich damit mein Geld verdien ist wahrscheinlich wirklich die Art den Code zu schreiben. Es ist mittlerweile alles modularer, parametisierter und besser kommentiert, da man sonst mit komplexeren Vorgängen garnicht mehr klarkommt. Man macht eben nicht ein Projekt zuende und hat damit nix mehr zutun, sondern betreut ein Kunden und muss nach einen halben Jahr, wenn was nicht läuft, auch noch wissen was wo welchen Sinn hat und das möglichst fix.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012

apachy  21.10.2013, 20:58

Daneben gibs natürlich auch Nachteile, man muss sich auf vieles einigen, was nicht immer den persönlichen Geschmack entspricht. Deutsche oder englische Variablenamen? Klammern direkt nach einen Block in der ersten Zeile oder daunter? Welche Entwicklungsumgebung? Tabs oder Spaces? Wie wird der SELECT eingerückt bzw. wo gibt es Zeilenumbrüche? JSON oder xml, vor der Variable ein Buchstabe zur identifizierung des Datentyps? usw.

0
Jakky  22.10.2013, 01:41
@apachy

Daneben gibs natürlich auch Nachteile, man muss sich auf vieles einigen, was nicht immer den persönlichen Geschmack entspricht. Deutsche oder englische Variablenamen? Klammern direkt nach einen Block in der ersten Zeile oder daunter? Welche Entwicklungsumgebung? Tabs oder Spaces? Wie wird der SELECT eingerückt bzw. wo gibt es Zeilenumbrüche? JSON oder xml, vor der Variable ein Buchstabe zur identifizierung des Datentyps? usw.

Das aber auch nur, wenn man im Team arbeitet und nicht alles selber erarbeiten kann.

Natürlich ist ein wesentlicher Unterschied, dass ein professioneller Programmierer bzw. Entwickler irgendwann zum Punkt kommen muss, dass die Anwendung auch vernünftig funktioniert, professionell aufgebaut ist und ein Hobbyprogrammierer eher werkelt, bis es seinen eigenen Vorstellungen entspricht und nicht unbedingt auf (vermutete) Vorstellungen bzw. Bedürfnisse anderer Kunden/Anwender achtet.

0
apachy  22.10.2013, 16:23
@Jakky

Nun der überwiegende Großteil der Leute, die damit ihre Brötchen verdienen wird in einem Team arbeiten und nicht als Freelancer oder ähnliches. Wir streben nunmal nach Sicherheit, meist in Form eines unbefristeten Arbeitsverhältnisses.

Aber wo du "zum Punkt kommen muss" ansprichst, auch wenn in einen anderen Kontext, es gibt Termine wann etwas fertig sein muss. Oft ist das noch nicht die beste Lösung, es fällt einen noch was ein oder man möchte gerne noch aber das System hat nun Live zu gehen, diesen Druck hat ein Hobbyprogrammierer wohl nicht.

0

Bei einem Berufsmäßigen Entwickler sind die Kenntnisse meist fokussierter, da sie nur das können müssen, was sie brauchen.

Ein Hobbyprogrammierer hat allerdings weiter gestreute Kenntnisse, nicht unbedingt vollständigere, aber auch unkonventionellere.

Viele Berufsinformatiker entstehen aus Hobbyisten, es ist eine Frage der Einstellung.

Naja, ich z.B. programmiere auch ab und zu mal an meinem Spiel welches ich aber nicht verkaufe oder Ähnliches. Profis lassen sich dafür bezahlen und wissen auch ganz genau immer was sie da tun im gegenteil zu mir - ich probier alles einfach immer aus.


NikeAir222 
Beitragsersteller
 21.10.2013, 20:34

Okay, aber ich meinte eigentlich von der Arbeit an sich. Das ist ja nicht wie bei uns, dass wir uns einfach hinsetzen und nach dem Backtracking-Prinzip arbeiten (so oft mist machen, bis man was funktionierendes hat) :D ...das ganze wird da ja strukturierter ablaufen...aber wie genau kann ich mir das vorstellen? :)

0

Der entusiasmus , bei berufsprogrammietern ist das dann wohl so ne "noch 300 Code Zeilen" . Hobbymäßig achtet man nicht so auf speicherverbrauch usw .