Was sollte ein professioneller C++ Entwickler kennen und können?



  • Mit dieser Fragestellung möchte ich mich an Profis wenden, also besonders an jene, die professionell als Softwareentwickler arbeiten und entsprechende real-life Erfahrungen gesammelt haben.

    Also etwas konkreter:

    Was sind die wirklich wichtigen Kenntnisse und Fähigkeiten von jemand, der in der Software-Entwicklung professionell einsteigen will?

    • Welche Kenntnisse von Uni/FH/Ausbildung waren wirklich hilfreich?
    • Welche Bücher sollte man gelesen haben?
    • Welche Software Engineering Methoden werden wirklich eingesetzt?
    • Welche OO Konzepte/Patterns sind praxisrelevant?
    • Welche Tools/Frameworks sind in der Praxis beliebt und verbreitet?
    • Wie wichtig sind OS-Kenntnisse, Algorithmen, Mathematik, etc.?

    Wie schon gesagt, möchte ich vorwiegend Profis im C/C++ Umfeld ansprechen, aber Meinungen von Leuten die z.B. vorwiegend mit Java/C#/VB.net/PHP/usw. arbeiten, sind auch willkommen - Hauptsache sie sind aus der Praxis und nicht nur Meinungen vom Hörensagen.

    Auch ist mir die Branche und der Anwendungsbereich erstmal egal, aber es wäre gut, diese dazu zu schreiben. Embedded Entwickler werden sicher ganz andere Schwerpunkte setzen, als Wirtschaftsinformatiker oder Webentwickler (die wohl kaum mit C/C++ arbeiten)...

    Auch ist mir wichtig zu erfahren, was _Einsteiger_ brauchen. Ich nehme nicht an, dass man nach dem Studium gleich Projekte managen muss, viel Analyse/Design macht oder Personalverantwortung trägt. Was sollte ein "Codemonkey" können, um richtig gut zu sein?

    Für ernstgemeinte, aussagekräftige Antworten wäre ich sehr dankbar.



  • Ich für meinen Teil habe Physik studiert und bin jetzt seit zwei Jahren SW-Entwickler, hauptsächlich in C++.

    noch ein Dilettant schrieb:

    [*]Welche Kenntnisse von Uni/FH/Ausbildung waren wirklich hilfreich?

    Von dem was ich an der Uni gelernt hab eigentlich nur die Methodik beim Lösen von Problemen - Teilprobleme erkennen, Problem zerlegen, Teillösungen finden, Lösungen zur Komplettlösung zusammenfügen. In Punkto Programmierung etc. hab ich an der Uni nichts gelernt/belegt.

    [*]Welche Bücher sollte man gelesen haben?

    Möglichst viele.
    In der FAQ zum C++-Forum gibts eine große Bücherliste. In meinen Augen wichtige Dinge zu C++ sind die Bücher von Scott Meyers, Alexandrescu, Sutter und Josuttis/Vandervoorde. Dazu dann etwas allgemeinere Literatur zu Design Patterns (GoF-Buch), Algorithmen und den Pragmatic Programmer. Nebenbei ein gewisses Grundverständnis zu paralleler Programmierung, Aufbau/Entwicklung von Programmiersprachen, parsing, Compilerbau, Software-Architektur, Revisionskontrolle usw. Wenn mir was in die Finger fällt was mich interessiert wirds gelesen. Wichtig ist denke ich, nicht eine Handvoll Bücher abzuhaken und zu denken das wars sondern sich immer weiterbilden.

    [*]Welche Software Engineering Methoden werden wirklich eingesetzt?

    Was meinst du für Methoden? Hängt sicherlich von der Firma ab was benutzt wird und was nicht.

    [*]Welche OO Konzepte/Patterns sind praxisrelevant?

    Alle. Patterns existieren nicht weil sie jemand lustig fand sondern weil sie immer wieder zur Anwendung kommen. Der trick ist rauszufinden ob sie für eine bestimmte Problemstellung relevant sind oder nicht.

    [*]Welche Tools/Frameworks sind in der Praxis beliebt und verbreitet?

    Schau im Netz welche Tools/Frameworks häufig erwähnt werden 😉

    [*]Wie wichtig sind OS-Kenntnisse, Algorithmen, Mathematik, etc.?

    OS: kaum bis garnicht, je nachdem. Algorithmen hin und wieder, man sollte schon die Komplexität abschätzen können von dem was man macht. Wenn man mit performancekritischen Programteilen umgehen muss, holt man entweder einen Algorithmusexperten dazu oder wird selbst einer 😉

    Auch ist mir die Branche und der Anwendungsbereich erstmal egal, aber es wäre gut, diese dazu zu schreiben. Embedded Entwickler werden sicher ganz andere Schwerpunkte setzen, als Wirtschaftsinformatiker oder Webentwickler (die wohl kaum mit C/C++ arbeiten)...

    Ganz "normale" Desktopanwendungen für Firmen.

    Auch ist mir wichtig zu erfahren, was _Einsteiger_ brauchen. Ich nehme nicht an, dass man nach dem Studium gleich Projekte managen muss, viel Analyse/Design macht oder Personalverantwortung trägt.

    Analyse von bestehendem Code auf jeden Fall. Du wirst besonders am Anfang nicht auf der Grünen Wiese entwickeln sondern in einem bestehenden System Fehler analysieren und Features einbauen. Mit der Zeit werden die Features größer und es ist auch ein wenig Eigenständigkeit in Punkto Design und Architektur vonnöten.

    Was sollte ein "Codemonkey" können, um richtig gut zu sein?

    1. Wissen, welches Handwerkszeug er braucht (neben der Programmiersprache sind das die Tools, Scriptsprachen usw.)

    2. Das Handwerkszeug möglichst gut beherrschen, wie jeder der im produzierenden Gewerbe tätig ist (gerade als kleiner Coder ist man mehr Handwerker als Ingenieur)

    3. Seine eigenen Fähigkeiten richtig einschätzen können. Dazu gehört auch zu wissen, welche Entscheidungen man selber treffen und verantworten kann. Vorgesetzte mögen weder Leute, die über Dinge entscheiden, die sie nicht entscheiden dürfen, noch Leute, die für jede Kleinigkeit nachfragen. Gute Software verschlechtert sich, wenn jemand sich am Design oder der Architektur zu schaffen macht, der davon nicht genügende Kenntnisse hat, andererseits kommst du nicht voran wenn du dich immer nur an dreizeiler herantraust.

    4. Verantwortlich und selbstständig arbeiten. Steh zu dem was du kannst, steh dazu dass du am Anfang nicht alles kannst, und fang anliegende Arbeiten an wenn sie getan werden müssen, im Zweifel frag deinen Vorgesetzten, aber frag von dir aus. Es gibt nichts schlimmeres als Leute, die am Rechner sitzen und Däumchen drehen bis jemand ihnen was zu tun gibt. Wenn dein Vorgesetzter dich jeden Morgen anrufen muss um dich drüber zu informieren dass du den Rechner anschalten und schonmal Mails lesen darfst, machst du was falsch 😉

    5. Kommuniziere. Gib Statusberichte selbsständig ab, vor allem wenn sich deine Arbeit verzögert. Wenn in Rundmails von Kollegen eine Frage kommt von der du weißt dass du sie gut beantworten kannst, dann zögere nicht, sie auch zu beantworten. Wenn du Spezialwissen hast, mach das bekannt, damit gibst du deinen Kollegen und der Firma einen Mehrwert.

    Du siehst also, es ist nicht nur das technische sondern auch die Softskills gefragt 🙂



  • Also ich bin in der Webentwicklung häufiger unterwegs und werde oft mit Zend-Framework konfrontiert.

    Im Internet sollte man auf jedenfall Joomla und Typo3 kennen.

    Und ganz wichtig. Erst denken, dann Coden. Sonnst gehts schief!

    Und immer dran denken.
    Dein Programm macht nicht das was du willst, sondern das was du schreibst.

    Hört sich logisch an, aber manchmal ists nicht schlecht sich das noch mal klar zu machen.



  • Das sollte man können oder gelesen haben:

    Bücher zu den Themen:
    - Datenstrukturen
    - Algorithmen
    - Automaten und Formale Sprachen
    - Mathe Differentialrechnung, Verktorrechnung, Integralrechnung usw. abhängig vom Aufgabengebiet.
    - Datenbanken (braucht man meist um Daten abzulegen oder verwalten zu lassen)
    - C++ Buch, sowie Buch zur Vertiefung von C++
    - Datenschutz & Datensicherheit, man sollte ein Vertändnis füe die Wichtigkeit der Daten haben und dies bei der SW Entwicklung entsprechend berücksichtigen
    - Betriebssysteme & Konzepte, Sockets, Callback, Threads, Process usw.
    - eventuell Vertiefung in bestimmte Bücher falls erforderlich, z.b. OpenGL/Direct3d für 3d Zeugs, Mikrocontrollerprogrammierung für Mikrocontroller usw.
    - Physik wenn man realwelt Probleme physkalisch nachsimulieren muß ist das hilfreich
    - Usability & GUI Design wichtig falls man das Interface bzw. GUI für ne Anwendung entwirft.

    So, daß wäre das, was mir so spontan einfällt.
    Am einfachsten ist es, wenn du einfach Informatik studierst, da wird das ganze dann eh alles behandelt.



  • Nachtrag:

    - Urheberrecht & Rechtswissenschaften

    Ein Verständnis für esteres ist sinnvoll, wenn man z.b. 3rd Party Librarys einbindet, oder an fremden Code arbeitet.
    Letzteres ist wichtig um gegen Softwarepatentklagen einigermaßen gerüstet zu sein.



  • Sqwan schrieb:

    Und ganz wichtig. Erst denken, dann Coden. Sonnst gehts schief

    Hier ein klein wenig UML schadet gerade beim Verständnis von komplexeren Algorithmen auch nicht.

    return 0 schrieb:

    Nachtrag:

    - Urheberrecht & Rechtswissenschaften

    Ein Verständnis für esteres ist sinnvoll, wenn man z.b. 3rd Party Librarys einbindet, oder an fremden Code arbeitet.
    Letzteres ist wichtig um gegen Softwarepatentklagen einigermaßen gerüstet zu sein.

    Oh ja. Das geht aber schon mit kleineren Dingen, wie Geschäftsbriefe ohne HRB, los.

    Produkt und Produzentenhaftung sollte man im Embedded Bereich auch nicht vergessen. Bsp: Ein Fehler in der Entwicklung eines Einpark-Assistenten im Auto führt dazu dass das Auto auf der Autobahn versucht rückwärts einzuparken.



  • Erstmal vielen Dank für alle bisherigen Antworten.

    pumuckl schrieb:

    n.e.Dilettant schrieb:

    - Welche Software Engineering Methoden werden wirklich eingesetzt?

    Was meinst du für Methoden? Hängt sicherlich von der Firma ab was benutzt wird und was nicht.

    Ich meine sowas wie RUP, V-XT, XP, Scrum, ... praktizieren das Viele, oder entspricht das mehr der Fantasiewelt von SE-Profs?

    pumuckl schrieb:

    Du siehst also, es ist nicht nur das technische sondern auch die Softskills gefragt 🙂

    Schon klar. Aber Softskills sind ja nicht unbedingt reiner Lehrstoff, den man aus Büchern erwerben kann. Mir ging es mehr und Hardskills.



  • Bitte ein Bit schrieb:

    Sqwan schrieb:

    Und ganz wichtig. Erst denken, dann Coden. Sonnst gehts schief

    Hier ein klein wenig UML schadet gerade beim Verständnis von komplexeren Algorithmen auch nicht.

    Mir hilft UML eher bei der Sicht auf mehr statische Objekt- und Klassenbeziehungen. Dynamische Abläufe als UML Sequenzdiagramme, etc. finde ich bei komplexen Algorithmen nicht sonderlich übersichtlich. Im Grunde halte ich gut gemachten Pseudocode und Struktogramme für viel nützlicher, um Algorithmen zu beschreiben.

    Bitte ein Bit schrieb:

    Produkt und Produzentenhaftung sollte man im Embedded Bereich auch nicht vergessen. Bsp: Ein Fehler in der Entwicklung eines Einpark-Assistenten im Auto führt dazu dass das Auto auf der Autobahn versucht rückwärts einzuparken.

    Wirklich? Haftet für sowas schon der einfache "Codemonkey", der den konkreten Code verbrochen hat, oder der Projektleiter, Analyst, Designer, oder die Firma? Ich meine: Autos werden ja nicht von einzelnen Freelancern geplant, gebaut und programmiert und dann an den Endkunden verkauft.

    Es haftet ja auch nicht ein Arbeiter am Band, der die Bremsen montiert, wenn die Bremsen einen Serien-Konstruktionsfehler haben.

    Sollte man als Freelancer für einen Automobilisten im Embedded Bereich arbeiten, so dürfte es folglich doch reichen, dass Pflichtenheft zu erfüllen und eine positive Abnahme zu bekommen. Wenn der Automobilist eine fehlerhefte Spezifikation und ein unzureichendes Pflichtenheft oder unzureichende Abnahmeprüfung gemacht hat, dann steht doch er in der Verantwortung.



  • noch ein Dilettant schrieb:

    Erstmal vielen Dank für alle bisherigen Antworten.

    pumuckl schrieb:

    n.e.Dilettant schrieb:

    - Welche Software Engineering Methoden werden wirklich eingesetzt?

    Was meinst du für Methoden? Hängt sicherlich von der Firma ab was benutzt wird und was nicht.

    Ich meine sowas wie RUP, V-XT, XP, Scrum, ... praktizieren das Viele, oder entspricht das mehr der Fantasiewelt von SE-Profs?

    Meiner Erfahrung nach ist das was man in den entsprechenden Büchern sieht oft eine idealisierte Vorstellung, die in der Praxis nur bedingt anwendbar ist. Viele der Methoden haben einen durchaus nützlichen Kern, man sollte allerdings nicht so naiv sein, sie ganz puristisch und dogmatisch in die Tat umsetzen zu wollen. Hier ist der gesunde Menschenverstand gefragt, im täglichen Geschäft wird je nach Firma sicher der eine oder andere Ansatz in den Entwicklungsprozess mit einbezogen, allerdings findet jede Firma da ihre eigenen Wege.



  • Hier ein klein wenig UML schadet gerade beim Verständnis von komplexeren Algorithmen auch nicht.

    Da hilft Mathe mehr als UML.



  • knivil schrieb:

    Da hilft Mathe mehr als UML.

    😃 Naja, die UML ist doch nicht so schlecht. Ich kann aber auch nicht die Meinung meiner ehem. Prof's teilen, welches alles in UML machen wollten.

    Ich nutze die UML nur um mir selbst Algorithmen zu verdeutlichen/strukturieren. Bei erweiterten Stringmanipulationen helfen Statecharts, bei der Darstellung von Algorithmen helfen Aktivitätsdiagramme, bei Übermittlung von Nachrichten helfen Sequenzdiagramme, bei der Strukturierung von Programmen helfen Klassendiagramme.

    Die UML ist keine Musterlösung für's Entwickeln von Software. Aber sie liefert für mich wichtige Tools zur Entwicklung von Algorithmen und wurde so schon längst zum Teil meiner Doku.

    Beispielausgabe: Ein String besteht aus mehreren Gleitkommazahlen, welche unterschiedliche Dezimaltrennzeichen haben können. Dieser String soll nun in die einzelnen Gleitkommazahlen zerlegt werden. Was liegt mir hier näher als einen Zustandsautomaten für das Problem zu entwerfen und diesen eins zu eins zu implementieren ?

    @noch ein Dilettant
    Wenn der Schaden hoch genug ist, ist jeder bedingt haftbar wenn er fahrlässig gehandelt hat weil er nicht nach dem neusten Stand der Technik entwickelt hat. Also muss potenziell jeder, welcher am Projekt beteiligt ist, auf die Sicherheit achten.
    Du kannst als Entwickler nicht erwarten dass man dich unschuldig spricht wenn du keine Testreihen hast, weil im Pflichtenheft keine vorgesehen waren, und deine fehlerhafte Software 100 Menschen das Leben gekostet hat.

    Aus diesem Grund ist dein Vergleich mit einem Arbeiter auch ein wenig mager. Der Schaden ist im Vergleich minimal. Ein Arbeiterfehler kann maximal 100 Auto's zerstören, ein Softwarefehler potenziell eine ganze Serie.



  • noch ein Dilettant schrieb:

    • Welche Kenntnisse von Uni/FH/Ausbildung waren wirklich hilfreich?

    SNMP



  • volkard schrieb:

    noch ein Dilettant schrieb:

    • Welche Kenntnisse von Uni/FH/Ausbildung waren wirklich hilfreich?

    SNMP

    dann hat sichs ja gelohnt 😉



  • noch ein Dilettant schrieb:

    Was sollte ein professioneller C++ Entwickler kennen und können?

    Das hängt sehr, sehr stark von der konkreten Arbeitsstelle ab. Ich brauchte bis heute keinerlei spezielle Mathe- bzw. Algorithmenkenntnisse die man nicht über logisches Denkvermögen herableiten kann (Selbst gewisse OS-Kenntnisse haben mit bislang mehr genützt). Einige andere wiederum haben damit täglich zu tun.

    noch ein Dilettant schrieb:

    Welche Kenntnisse von Uni/FH/Ausbildung waren wirklich hilfreich?

    Die Fähigkeit zu lernen. Wobei (und das trifft leider auf einige zu) diese Fähigkeit auch nicht nach dem Studium verkümmern sollte. Ich kenne nicht wenige die sich nach dem Studium maximal noch in ein-zwei Themen eingearbeitet haben, und anschließend sich darauf ausgeruht haben.

    Ich glaube das einzige was man wirklich allgemein Verwenden kann, ist logisches Denkvermögen und die Fähigkeit zu lernen. Selbst bei Tools und Frameworks sieht es schon sehr gemischt aus (und Entwicklungsmethoden... sorry, aber ich war bislang nur in kleineren Betrieben und kann mir ein schmunzel hier nicht ganz verkneifen).



  • Bitte ein Bit schrieb:

    Du kannst als Entwickler nicht erwarten dass man dich unschuldig spricht wenn du keine Testreihen hast, weil im Pflichtenheft keine vorgesehen waren, und deine fehlerhafte Software 100 Menschen das Leben gekostet hat.

    Wenn bei einer sicherheitsrelevanten Software vor der Auslieferung nicht eine gute Qualitätssicherung und umfassende Tests durchgeführt werden und deshalb ein fehlerhaftes in Umlauf kommt, dann ist das nicht Schuld des Entwicklers. Vielmehr Schuld derjenigen die entweder die falschen Prozesse aufgesetzt haben (keine ordentliche QS oder kein testing eingeplant haben) oder derjenigen, die diese Prozesse umgangen haben, indem sie die QS oder das Testen abgekürzt oder umgangen haben.
    So oder so wird der Entwickler oder die Tester usw. nicht in erster Linie dafür haften sondern die Firma, die für ihre Erfüllungsgehilfen grundsätzlich haften muss.
    Bei dem Auto, dessen fehlerhafte Software Menschenleben gekostet hat, würde zuerst einmal der Autohersteller gegenüber den geschädigten haften, danach haftet im Rahmen der Vertragslage die Zuliefererfirma/Softwarefirma, soweit nicht nachgewiesen werden kann, dass sie gegen ihre Pflichten im Rahmen des Vertrags verstoßen hat, und dann kann diese Firma den Entwickler oder Tester etc. haftbar machen, allerdings nur dann, wenn der nachgewiesenermaßen fahrlässig gehandelt hat.



  • pumuckl schrieb:

    ...und dann kann diese Firma den Entwickler oder Tester etc. haftbar machen, allerdings nur dann, wenn der nachgewiesenermaßen fahrlässig gehandelt hat.

    Manchmal stehen Firmen in enormen Zeitdruck, und da kann es ganz plötzlich sein, das man bewusst gewisse Fehler in Kauf nimmt ("Der Kunde wird es eh erst nach der Gewährleistung bemerken"). Problematisch ist es vor allem wenn dir durchaus bewusst ist, was du für einen Schaden in diesem Fall verursachen kannst.

    Manchmal sollte man lieber bestimmte Aufgaben verwehren, als sie umzusetzen - selbst auf die Gefahr hin gekündigt zu werden. Ich habe einmal etwas verweigert, mit dem Hinweis das ich dies nur auf schriftliche Aufforderung durchführe. Es hatte mir damals nicht den Job gekostet, wohl aber einiges an Stress eingebracht (und glaubt mal nicht das ich die schriftliche Aufforderung erhalten hätte), zum Glück war das Thema damit zumindest für mich durch (Ich habe auch nie erfahren was damit passiert ist, und der Kunde ist auch abgesprungen - was mir vorgehalten wurde).



  • die UML ist doch nicht so schlecht.

    Genau da scheiden sich die Geister. Bildchen hat man vorher auch schon gemalt. Deine Beispiele sind aber auf die Implementation bezogen. Algorithmen sind davon unabhaengig. UML hilft vielleicht eine bestimmte Implementation zu verstehen.



  • Ein professioneller C++ Entwickler sollte immer den kompliziertesten Weg einschlagen, alle möglichen Designpattern auf den Code klatschen (auch wenn es nicht nötig ist) und auch sonst behaupten, dass C nichts mit C++ zu tun hat.

    Wenn du diese Kriterien erfüllst, dann bist du zwar ein Trottel aber dafür ein professioneller C++ Programmierer.

    In diesem Sinne noch, einen schönen Tag.

    PS: Was macht denn das Zeichen des roten Kreuzes hier? :hoppschwiiz: :hoppschwiiz: :hoppschwiiz:



  • wtflol schrieb:

    Ein professioneller C++ Entwickler sollte immer den kompliziertesten Weg einschlagen, alle möglichen Designpattern auf den Code klatschen (auch wenn es nicht nötig ist) und auch sonst behaupten, dass C nichts mit C++ zu tun hat.

    Du verwechselst da was. Es ist genau andersrum.

    wtflol schrieb:

    PS: Was macht denn das Zeichen des roten Kreuzes hier? :hoppschwiiz: :hoppschwiiz: :hoppschwiiz:

    Du verwechselst da was. Es ist genau andersrum.



  • Die haben das weiße kreuz nicht richtig hin bekommen http://www.wk-cb.bz.it/ :hoppschwiiz:

    Ein professioneller C++ Entwickler muss mindestens 3 boost::bind in einer Zeile Code unterbekommen.



  • erkenner schrieb:

    Ein professioneller C++ Entwickler muss mindestens 3 boost::bind in einer Zeile Code unterbekommen.

    Zeilen können in einer freiformatierten Sprache wie C oder C++ beliebig lang sein, und daher ist es kein problem, beliebig viele boost::bind darin unterzubringen.

    Ansonsten danke allen, die bisher ihre (ernsthafte) Meinung gesagt haben und freue mich auch auf weiters Feedback.

    Wer C++ als Sprache für die professionelle Softwareentwicklung in Frage stellen will, kann auch gerne Alternativen aufzeigen, sollte dies aber auch gut begründen können.

    Ansonsten werden natürlich wieder die größten Trottel die Fußball WM gewinnen. Wer mit mehr als 3Jahren noch seinen Daseinszweck darin sieht, einem Ball hinterherzurennen, ist grenzdebil. Wer dafür absichtlich andere Menschen verletzt, gehört in die Anstalt. Eine Gesellschaft, die für sowas Milliarden ausgibt, ist krank.


Anmelden zum Antworten