Portfolio Update April/Mai 2013

Ich definiere mich selbst als Java Entwickler und Linux Administrator.

Java

Programmiersprachen decken Felder ab. “Ich kann Java” ist eine unzureichende Aussage. “Ich kann kochen” würde bei einem Koch auch nicht viel Sinn ergeben – Kochen können alle Köche.

Deswegen unterscheiden wir hier mal zwischen Server, Web, Ui, Frameworks Meine “Skills” :

  • “Server”. Kenne mich einigermaßen mit dem JBoss und dem Tomcat aus. Ich bin in der Lage Middlewares zu schreiben, die als Schnittstellen SOAP, HTTP oder vergleichbares anbieten. Zeitgesteuerte Services sind kein Problem.
  • Web. Ein Wort: Spring. Ich bin kein Designer, sondern Entwickler und kann mit Spring schnell Webseiten Systeme zusammenschustern.
  • UI. Ich bin halt kein Designer. Meine bisherigen Aufgaben beinhalteten bisher leider keine klassische Programmerstellung mit Java. Ich möchte aber hier weitere Erfahrungen sammeln
  • Frameworks. Spring, Hibernate, JPA – mehr sag ich nicht :D

Linux Administrator

Hier die Standard Aufgaben. Wartung, Installation, Absicherung, Backup von Daten und so weiter. Nebendran habe ich Nagios recht lieb gewonnen und arbeite vorwiegend mit Subversion.

So far.

schneller,Schneller,SCHNELLER

Wenn ein Programmierer schnell ist, sind 3 Programmierer zehn mal so schnell, wie dieser eine Programmierer. Diese Rechenregel gilt für Gruppen bis 6 Leute, danach gehts wieder bergab.

Leider sind die Entscheidungsträger, meistens kaufmännisch orientierte Menschen, immer noch der Überzeugung, dass die Anwendungsentwicklung das Ende ist. Dabei ist ein Programmierer nur ein GESELLE und nicht mehr. Bevor hier das große Geschrei beginnt, eine kleine Begriffserklärung.

Programmierer. Kommen zur Arbeit und tippen Regeln in eine gewisse Sprache ab, für die es einen Compiler gibt. Sie entwickeln fehlende Strategien im Programm und sorgen damit für einen sauberen Ablauf.

Softwareentwickler. Kommen zur Arbeit und denken sich Regeln aus. Diese Regeln werden in ein Model eingearbeitet und schließlich abprogrammiert. Das Model wird in ein Basismodel gewandelt (Framework, Library). Die Programmierung basiert nicht mehr auf die ursprüngliche Sprache, sondern auf vorher entwickelten Modellen, die sich bewählt haben. So garantieren die Softwareentwickler Updates für alle Projekte, die die Modelle nutzen.

Die Entwickler nennen sich meistens nur Programmierer, weil die Entscheidungsträger mit die Unterschiede nicht kennen.  Jetzt sollte es allen klar sein: Programmierer sind nichts weiter, als GESELLEN. Die MEISTER sind die Entwickler, weil die mehr tun, als die Regeln abzuarbeiten, die von irgendwoher kommen.

Leider kommen die Regeln oft von fachfremden Personen (aus der Sicht des Technikers ist ein kaufmännischer Vorgesetzter eine fachfremde Person). Und da habe ich ein großes Problem mit. Ein Beispiel: Prozesse werden in der Informatik als ein Ablauf technischer Arbeitsschritte gesehen. Der Optimierungsbedarf ist dort zu finden, wo viel menschliche Arbeit zu finden ist (kommt damit endlich klar) und wo Datenstrukturen direkt von Menschen geliefert werden (Excel Listen, von Hand geschriebenes XML oder Textdateien, bäh).

Mit dieser Regel im Kopf kann man Prozesslücken beim ersten Gespräch herausfinden und eine grundsätzliche Lösung entwickeln. Kaufmänner wollen auch die politischen Prozesse verstehen, aber die Informatik interessiert sich nicht für die politischen Prozesse. Für uns gilt EVA.

Wer es nicht glaubt, sollte mal einen Softwareentwickler fragen- wenn man einen findet. Dass ist ein Problem, weil, gerade in Deutschland, ein echt krankes Bild von der Informatik existiert, ein Bild aus dem 18. und 19. Jahrhundert, wo ein Kaufmann seine Gesellen scheucht und die Hand auf ihnen hat. Ein Kaufmann hat natürlich auch seine Prozessicht, seine Erfahrungen und seine berufsmäßigen Werkzeuge, aber die kann man nicht so wirklich auf Informatik anwenden.

Ein Beispiel ist die objektorientierte Analyse (die kaum jemand richtig beherrscht). Die Analyse ist der erste Schritt zur Modellentwicklung für den Softwareentwickler. Dabei wird man merken, dass der Benutzer berücksichtigt wird, aber erst mal total unwichtig ist.
Der Kaufmann kann es vielleicht anders sehen, aber uns ist der Benutzer bei der Modelentwicklung egal. Wir wollen wissen, wie das EVA (Eingabe, Verarbeitung, Ausgabe) – Prinzip im Prozess aussieht und nicht, was der Mensch gerne für Knöpfe auf dem Feld haben will.

Die Entwicklung von der UI her ist falsch. Die UI ist das RESULTAT, nicht der Grundstein. Der Grundstein eines qualitativen Softwareprojektes ist die OOA, das Softwaremodell und die darauf aufbauenden Klassen. Dass hat nicht nur rein technische Gründe, sondern auch organisatorische:
Der Programmieraufwand soll minimal gehalten werden. Das Ziel ist ein sinnnvolles Modell zu entwickeln (70% der Projektzeit) und dieses in ein Programm zu gießen (30% der Projektzeit).

Dass ist unser Ziel. Wir wollen ein sinnvolles Modell haben. Die Programmierung ist uns egal (die ist nicht wichtig, geben wir irgendwem, der das abprogrammiert). Damit sind wir schnell unterwegs.
Wir reden, schreiben und planen viel und am Ende plöppt ein Produkt und ein Modell, dass wir wiederverwenden können.

Wir können aber schneller. Die Kaufmänner sind für uns gut, weil sie die Personen im Blick halten, was wir nicht tun. Aber dass zwingt uns, schneller zu werden. Man nehme eine Pizzaria als Beispiel. Der Kunde kommt in den Laden, bestellt eine Pizza und in den meisten Fällen kann er dem Bäcker beim Arbeiten zuschauen. Er sieht den Teig, das Produkt und kann sehen wie das Produkt erstellt wird. Jeden Arbeitsschritt kann der Kunde sehen. Bei der Softwareentwicklung ist das nicht der Fall. (dieses Beispiel kann man mit Autos, Uhren, Häusern, Bäckern usw…machen)
Und in vielen Fällen misstraut man uns, gibt uns Kernarbeitszeiten und denkt, dass es sinnvoll sei, einen Menschen 8 Stunden an den PC zu ketten.

Wir müssen auf dieses Problem reagieren. Dass können wir, indem wir die Phasen der Modellierung und Programmierung zerhacken. Jede Woche entwickeln wir ein kleines Modell und lassen es durchprogrammieren. Das Ergebnis geben wir dem Kunden. Somit muss der Kunde keine 6 Monate warten, sondern kriegt jede Woche ein Ergebnis präsentiert. Das geht aber nicht, wenn man nur ein Programmierer hat. Man braucht schon mindestens drei Leute, ein Programmierer, ein Entwickler und einen, der die Übersicht hat, das Team ordnet und von beiden Welten (Technik, BWL).  Die drei Leute werden garantiert schneller sein, als jeder solo Programmierer, weil sie ein Fließbandbetrieb einrichten können.

Jetzt noch einige Begriffe, die nicht jedem klar sein können.

Schnelligkeit. “Ich habe heute eine Software ausgeliefert. Dabei habe ich nur 4 Mal 15 Stunden Tage schieben müssen. Okay, die Software ist langsam und stürzt ab, wenn man gewisse negativeingaben in zwei Felder schreibt, aber sie ist fertig. Ihr habt 100 Stunden geschätzt. Total lächerliche Zeit” War der Programmierer schnell? Nein. Er hat seine Gesundheit aufs Spiel gesetzt und die QUALITÄT der Software war miserabel. Das Team schätzte mehr Aufwand, hatte aber Phasen drin, die der einzelne Programmierer nicht hatte, darunter z.B. eine ausgedehnte Analysphase, eine testgestützte Entwicklung und die Programmierer sollten keine Überstunden machen.

Fließband. Als in der Industrie die Fließbandarbeit eingeführt wurde, hatte dass den Sinn Stationen aufzubauen, die dann viele Dinge parallel machen konnten. Man stelle sich ein Projekt als ein Fließband vor. Die Arbeiter an dem Fließband haben die die Aufträge PLANUNG, TEST, IMPLEMENTIERUNG, AUSLIEFERUNG. Die Teamarbeit sieht so aus :

Projekt A kommt rein. Die Planungsphase beginnt. Projekt B kommt rein und kommt in die Planungsphase. Projekt A wandert in die Testphase (das Modell wird geprüft und automatisierte Tests werden entwickelt). Projekt C ist in der Planungsphase angekommen. B steckt auch noch drin. Projekt A wird implementiert. Projekt B kommt in Testphase, Projekt C ist fast fertig und wandet mit B in den TEST.
Man sieht: Es ist nicht EIN Fließband, sondern mehrere und das Team beackert alles.

Kaufmänner arbeiten nicht so. Dass muss allen klar sein. Ist es aber nicht. Wir haben ein ernsthaftes Problem. Es ist schon ein Indiz dafür, dass was schief läuft, wenn die meisten tollen Softwareenwicklungen in ausländischen Unternehmen stattfindet. Deutschland wird niemals führend in der IT sein, wenn die Kaufmänner ihre Hand auf alles legen – und uns ITler die Luft zum Atmen nehmen.

Blink, Google, Microsoft und der ganze Rest

Das Internet. Für den normalen Nutzer wurde es zuerst durch die Erfindung von HTTP und HTML wirklich greifbar. Erst diese Technologien haben das Internet zum Web werden lassen, indem wirklich jedermann Dinge tun kann, indem man sich einen Browser holt.

Microsoft erkannte diesen Markt recht spät und schaffte es aber durch die Betriebssystem Monopolisierung sich mit einem, der schlechtesten Software Produkten, dem Internet Explorer, an die Spitze zu bringen.
Bis heute hat Microsoft mit seiner Dickköpfigkeit zu kämpfen und baut eine Browserversion nach der anderen, die zwar immer besser werden, aber auch nicht wirklich gut.
Sie erfinden ein Quirks Modus, bauen JScript und clientseitiges Visual Basic Skript, anstatt sich wirklich um die W3C Standards zu kümmern. Microsoft ist das Paradebeispiel für Dummheit und Ignoranz, weil dieses Unternehmen nicht verstand, dass es sich öffnen muss. (Man muss nur deren Reaktionen zu Linux und Firefox/Netscape nachverfolgen. Arte und andere haben gute Dokumentationen produziert)

Microsoft hat sich gebessert, versteht den Kern der Sache aber bis heute nicht und werkelt an ihrer dummen Browserengine weiter. Jetzt macht Google einen ähnlichen Schritt, den ich überhaupt nicht gut. Sie verlassen Webkit. Bevor ich aber auf Google herumreite, etwas zu Webkit.

Webkit ist eine sehr gute Browser Engine, die bisher in Googles Chrome und Safari verwendet wird. Webkit ist schnell, modern und kann von jedem verwendet werden. Webkit ist DIE Browserengine.
Gecko, vom Firefox, ist ebenfalls frei, jedoch ein alter Dinosaurier, der mittlerweise zuviele Altlasten mit sich herumträgt.

Theoretisch könnten also alle Firmen sich auf Webkit stürzen und es pflegen und besser machen – wie beim Linux Kernel. Aber das tun sie nicht und jetzt kommen wir zu Google.
Google lobt Webkit – und macht einen Fork.

Was ist ein Fork? Ein Fork ist, wenn sich Machtstrukturen innerhalb eines Projektes so verfestigt haben, dass alle Mitglieder eines Projektes das Ziel aus dem Augen verlieren und sich trennen.
Blink ist so ein Ergebnis.

Wir brauchen Blink nicht. Wir brauchen Webkit. Wir brauchen eine Browser Engine wo jedes Unternehmen daran arbeitet. Es ist, wie mit den Frameworks für HTML Generierung. Im Grunde geht es uns nur darum, dass unsere Kunden HTML ordentlich sehen. Und da reicht eine Engine, ein Framework und ein HTML Standard.

Aber Unternehmenspolitik, die, wie alle Politik, sich nur auf Machtgier reduziert, verhindert, dass wir ein einheitliches, sauberen Web haben. Schade eigentlich

Evernote – für alles

Evernote

Notizen zentral speichern. Diese Funktion hab ich eine echt rudimentäre Notizenfunktion zuerst in irgendeinem KDE gesehen, aber da wars Thema Cloud und Internet nicht so Thema.
Später gab es auch in Outlook so eine Art Notizenverwaltung. Alle hatten sie es gemein, dass sie sich an diesen gelben Klebezetteln orientierten.
(In den Filmen kleben die Dinger immer an Monitoren. Bei mir fielen sie immer ab.)

Als IT Mensch, hat man mit vielen Technologien, Konzepte und Problemen zu tun. Leider, so meine Erfahrung, schreiben die Leute keine oder nur wenige Notizen auf. Es ist, alsob jemand etwas entdeckt hat, aber sich keine Notizen macht un dann nach einigen Wochen die gleiche Sache wieder zu entdecken. Weiterlesen

Es ist unglaublich

Microsoft bekommt nicht mal nach einem halben Jahrhundert Mail Protokoll seine Cloud Exchange Server stabil.
Seit Tagen kämpfe ich mich Outlook.com. Mal lässt IMAP mich durch, SMTP aber nicht. Dann geht überhaupt nichts mehr. Die Web Oberfläche ist genauso stabil- mal geht das Einloggen, mal geht es nicht und eine weiße Seite erscheint (ja, auch im Internet Explorer).

Die Würze: Es geht nicht um den Free Mail Quatsch, sondern richtiges Paid Enterprise Gedöns. Und Infos bekommt man von denen auch nicht. Ich habe ja bei Microsoft angerufen, ich wollte den Fehler melden. Und was ist das Ergebnis? Microsoft hört einem ohne Support Vertrag nicht mal zu. Vielleicht bin ich zu naiv. Meine Vorstellung Cloud Diensten ist, dass sie funktionieren müssen, weil ich dafür bezahle.

Jetzt muss ich die Unit Tests umschreiben und andere Email Adressen nehmen, damit ich Prozesse ordentlich testen kann. Aber das sind, dank Spring, nur 4 Zeilen in einer Konfigurationsdatei

Why Java?

Warum sollte man Java lernen? Weil die Sprache recht abgeschlossen ist. Auf Basis dieser Sprache wurden schon eine Menge Konzepte entwickelt und viele Frameworks geschrieben, auf die wir leicht zurückgreifen können. Um der Sprache herum gibt es Tools, die die Programmierung weg vom Code hin zu konzeptualer Programmierung (das habe ich mir gerade ausgedacht) bringen. Hier ein paar Beispiele.

Hudson

Ein CI Server. CI bedeutet Continuous Integration und ist Teil eines Build Prozesses. Das ist, was wir in Java immer vorfinden werden: Arbeitsprozesse.
Man kann natürlich auch ohne den Kram in die Tasten kloppen und irgendwas erreichen. Aber das macht Java nicht aus.
Hudson horcht auf Quellcode und baut diesen, wenn Änderungen vorhanden sind. Hudson führt Tests aus, schickt Mails zum, wenn man es will, packt das Code Ergebnis irgendwohin, erzeugt die für Apache typischen Webseiten zu Projekten und tut noch eine Menge mehr.

Ant und Maven

Ant baut Software. Man erzeugt eine Ant File, wo drin steht wie was wo und wann kompiliert, kopiert oder sonst gemacht werden soll. Es definiert einen Build Prozess ( wieder dieses Wort!), wie die Software auszusehen hat, wenn Ant einmal durch den Code gerannt ist.
Maven arbeitet auf eine anderen Ebene. Maven ist geil. Maven macht Java erst elegant, Maven ist das Tool, was für dich die Abhängigkeiten deiner Software löst – und die Abhängigkeiten der Abhängigkeiten – und die Abhängigkeiten der Abhängigkeiten der Abhängigkeiten usw. Es ist brutal ohne Maven auf Frameworks zu arbeiten. Maven kontrolliert den Compiler, Maven führt die Tests aus und sorgt für coole Berichte. Maven gibt der Kontrolle über das Projekt, indem du Maven einen mit seiner POM.xml einen Rahmen gibst.

Eclipse vs. Netbeans

Wir benutzen keine Texteditoren sondern IDEs. Diese Dinger nehmen dir wieder viel ab, indem sie Code kontrollieren und dir anzeigen, wo Probleme sein könnten. Sie können keine Probleme lösen, aber sie können dir helfen Probleme zu erkennen. Die großen IDEs für Java sind Eclipse und Netbeans.

Ich sage nicht, dass Eclipse doof ist, aber ich nehme lieber Netbeans. Der Grund ist recht simpel: Netbeans hat Maven drin und Web ist dabei sodass ich direkt loslegen kann.
Mit Eclipse hast du eine Kiste voller Einzelteile und du musst sie zusammenbauen. Maven ist irgendein Modul, dass ich, ehrlich gesagt, nicht so richtig kapiere. Bei Netbeans ist alles für Java schon fertig.
Wenn ich mal Android Dinge tue nutze ich auch Eclipse. Aber es ist die fertig konfigurierte IDE vom SDK und nichts, was ich selbst konfiguriere. Ich gehe den Weg des geringsten Widerstandes – und dass ist bei Java Netbeans und bei Android das konfigurierte Eclipse aus dem SDK.

Spring

Jetzt kommen wir zum Code. Ich liebe Spring. Es ist so einfach. Spring ist ein Konzept, ein modulares Framework und endlich eines, was durchweg Sinn macht. Spring macht Dinge nicht anders, sondern nimmt dir alle nervige Arbeit ab. Wer schon mal eine Datenbankschnittstelle programmiert, weiß, wie ärgerlich es sein kann immer den gleichen Code zu schreiben, der sich nur minimal ändert. Dafür hatte irgendwer mal das CRUD Konzept entwickelt. CRUD reduziert die Schnittstellen erst mal auf das Minimum, was irgendwie alles brauchen : Create, Read, Update und Delete.
Spring baut dir das schon und der Rest wird mit abstrakten, also nicht fertigen, Methoden geregelt. Dabei gilt die Regel: Ist deine Lösung kompliziert, hast du das Problem nicht verstanden.

Spring folgt dabei dem Konzept der aspektorientierter Programmierung. Um zu verstehen, was Aspekte sind, muss man wissen, was wir in der IT unter Objekte verstehen. Um zu verstehen, was Objekte sind, muss man das Konzept der objektorientierten Analyse und Designs verstehen. Leider scheitert viele an diesen Hürden. Ach ja : Man muss noch Java können, aber das ist ein Kinderspiel im Vergleich zu den anderen Themen.

 

Java ist für mich weniger durch die Sprache ansich, sondern vielmehr durch die Projekte drumherum, interessant.
In Zukunft werde ich auf die einzelnen Themen genau eingehen. Heute morgen um 6 Uhr hatte ich auf einmal Lust irgendwas mit Java zu schreiben und wollte hier einige Dinge bloß anreißen. Bloggen macht mir so langsam wieder echt Spass.