Praktisches & Grundsätzliches zur Informatik

Software-Implementierung, Programmierung

Programmierung: damals (vor 2000) und heute

Den meisten Programmierern — und leider auch denen, die sie führen sollen — ist noch nicht so richtig bewusst geworden:

Die Implementierung vorweg spezifizierter Software — vor allem im Enterprise-Bereich — ist eine Aufgabe, die heute deutlich anders angegangen werden muss als noch vor 20 Jahren.


Betrachten wir das genauer anhand einiger Fakten zitiert aus [1]:

    Software developed 20–30 years ago was much simpler compared to modern software, with respect to functionality, security, performance, and scalability. Only a handful of libraries or frameworks were available at that time to implement any functionalities.

    Thus, software written 20–30 years ago involved a significant amount of effort in programming.

Damals galt als guter Software-Implementierer (= Programmierer), wer COBOL, Fortran oder C, später dann auch C++ perfekt beherrscht hat und in der Lage war, viel Code in solchen Programmiersprachen in kürzester Zeit möglichst fehlerfrei zu schreiben.

Die Code-Bibliotheken, die es damals zu kennen und anzuwenden galt, waren recht überschaubar: Es waren
Dem gegenüber sollte man heute wenigstens die beiden riesigen Ökosysteme wiederverwendbarer in Java oder C# implementierter Funktionalität wenigstens grob kennen. Jedes von ihnen besteht heute aus ganz sicher mehr als 25.000 Klassen mit jeweils nicht selten weit mehr als 10 Methoden. Vom Entwickler selbst zu implementieren ist wirklich nur noch die rein applikationsspezifische Logik der gewünschten Anwendung.

Ganz sicher ist richtig:
 
    Software development is a complex process, and programming is just one of the areas to contribute to modern software.

    Because of increased usage of software, especially over the Internet, by both consumers and organizations, software became very complex, and more and more it might be an insane decision to build something from scratch. Honestly, unless it's a completely new platform or operating system, the core programming required to develop modern software is less intense compared to older efforts.

    While programming knowledge and effort is still very important, the amount of effort that is required to build great software (bug free, secure, and salable) is in engineering.

Letzteres ist richtig, obgleich wir beobachten, dass der Begriff Software Engineering (geprägt in Reaktion auf die Software-Krise der 60-er Jahre) heute aus der Mode zu kommen scheint. Dass das dann gelegentlich sehr böse Folgen hat, wird heute viel zu wenig erkannt und ernst genommen.

Tatsache ist und bleibt:

 
    Software development is a complex process, which involves a lot of different kinds of effort. Besides coding, it involves efforts from documenting process, to formatting data, from reading log data, to sending reports, from automatically testing, to manually testing, from complex debugging, to manually investigating issues, and so on and so forth.

    A huge effort can be made extremely efficient by using the right set of tools and platforms:
       
    • Writing software involves one or more editors, some of which also referred as IDE (Integrated Development Environment). Modern IDEs, such as Visual Studio or Eclipse, offer a great amount of functionality to make developers productive, but a significant amount of these features are not known by most developers.

      Popular IDE’s also commercial and free plugins (such as Resharper), which enable even more developer productivity.

      Especially important became code generators in all forms — even when written specifically for a project they will be very useful (and can save you much money).
       
    • Utilities and online services such as e.g. http debuggers like Fiddler, build and deployment tools, etc. can help a lot.
       
    • Really competent developers also create their own sets of tools to perform repetitive actions for which the appropriate software may not be available externally.

    For software developers, who are some of the most expensive people to hire, spending money on right tooling for them is worth doing. In lots of cases however, business owners – even owners of software houses – seem not to be interested in investing much on tooling for developers. Do they not see that using the right set of tools will enable a surprising amount of productivity?


Wichtiger noch als alle Werkzeuge sind erfahrene Systemarchitekten und Programmierer:

Was man haben sollte, sind Entwickler, die garantieren, dass nur Code geschrieben wird, der absolut notwendig ist, aber zudem auch gut verständlich und über Jahre hinweg kostengünstig wartbar.

So selbstverständlich diese Ziele sind, ist doch vielen Managern nicht klar, wie wenig sie i.A. erreicht werden — und das vor allem deswegen, weil man allzu oft glaubt, mit wenig gut ausgebildeten Leuten auskommen zu können:

 
    The software industry (as far as producing code is concerned) has become very mature in the last three decades. Almost every problem that developers are trying to solve by coding has been solved already and can be reused via APIs or web services, some of which are commercial, while others are free.

    Besides, open source frameworks have become quite important and provide great flexibility. To understand what they offer, how to use their APIs and how to customize them as needed by the users has become quite easy.

    Before jumping into programming, software architects should make clear which part of a problem at hand has been solved fully (or partially) before already. To reuse existing solutions should be mandatory.

    Writing great software requires defining a good architecture that not only follows good design patterns and principles, but also takes advantage of modern infrastructures. Producing well-engineered code not only enables writing new functionalities faster, but also reduces bugs and testing effort significantly.

    But, beautiful engineering requires continuous improvement.

    Ashraf Alam [1] says: "I have seen a surprising amount of low quality code in different software projects in my professional career, which continuously adds technical debt. A simple project that started 5 years ago is full of non-engineered ugly code and requires 20+ people to handle the development cycle (where they are spending 80% of their time fixing bugs only)."

    One of the main reasons behind this awful situation is that we employ too many pro­grammers that have no intention at all to work as if they wanted to become software architects:

    Programmers who do not strive to become software architects quite often produce code that soon turns out to be more a burdon than a solution. Most managers however are not aware of this.
Wissenswertes zu "Programmierung, Software-Implementierung" zusammengestellt durch Gebhard Greiter.
tags: Programmierung1gegreit Implementierung1gegreit Praktisches1gegreit