Sie möchten programmieren lernen? Sei es aus persönlichem Interesse, Spaß oder als Investition in eine berufliche Perspektive? Möglicherweise haben Sie vor Jahren in der Schule oder Uni erste Erfahrungen sammeln können und liebäugeln jetzt mit einem Wiedereinstieg in die faszinierende Welt des Codings? Um in puncto Know-How-Erwerb nicht in einer Sackgasse zu landen, was letztendlich auch ein Zeit- und Kostenfaktor ist, müssen Sie die aktuellen Programmier-Trends kennen. Programmieren ist eine faszinierende, endlose Profession mit schnellen Veränderungen, leidenschaftlich geführten Debatten aber auch plötzlichen und unerwarteten Comebacks. Lassen Sie sich überraschen.
Im Trend
Das Tolle am Programmieren ist: Schreiben Sie eine echte Killer-App, interessiert sich kein Arbeitgeber für Ihr Uni-Diplom. Die Liste entsprechender Persönlichkeiten, insbesondere aus dem Open-Source-Umfeld ist lang, um mit Linux-Erfinder Linus Torvalds den Anfang zu machen. Der hat zwar sein Diplom schon lange in der Tasche, war aber schon vor seinem Abschluss eine Berühmtheit und konnte sich seinen Traumarbeitsplatz im Wunschland USA nachher mehr oder weniger aussuchen.
Coding für Fun?
Programmierer haben für die schnelllebige und veränderliche Welt aus Mode und Lifestyle, in der Trends ebenfalls kommen und gehen, meist nur ein Grinsen übrig. In der Welt der Technik, Wissenschaft, IT und Mathematik treten dagegen allein Regeln, Strenge und Präzision an die Stelle von Mode-Erscheinungen. Trotz oder gerade deswegen kann man wohl kaum sagen, dass Programmieren als Beruf keinen Trends unterworfen ist. Der Unterschied zwischen gewöhnlichen und Programmiertrends besteht darin, das letztere in der Regel ausschließlich durch die Aussicht auf eine größere Effizienz, einer einfacheren Benutzbarkeit oder besseren Individualisierbarkeit getrieben sind und nicht von weichen Faktoren. Neue Technologien, die einen oder mehrere dieser Aspekte realisieren, stellen vorherige Entwicklungen oft schnell in den Schatten. Wir leben nun einmal in einer Leistungsgesellschaft.
Zugang zu Wissen
Daher ist es auch wichtig, wie und wo Sie programmieren lernen. Kaum eine andere Wissenschaft bietet allerdings heute die Möglichkeit, auch ohne vermeintliche Beschränkungen durch Schulbildung, soziales Umfeld oder finanzielle Möglichkeiten Zugang zu finden. Viele bekannte Programmierer kommen aus den USA. Hier sitzen zweifelsohne die weltweit größten und wichtigsten IT-Firmen. Allerdings: ein Kollege-Platz in den USA kostet richtig Geld, am MIT etwa satte 55.000 US-Dollar. In Deutschland ist ein Informatikstudium zwar auch mit finanziell geringeren Aufwand zu haben, ob die Qualität dann aber der am MIT entspricht, steht auf einem anderen Blatt. Wer professionell programmieren lernen will, kann und sollte sich aber ohnehin anderswo umsehen.
Hackerspaces statt Studium
Der neuste Trend sind Hackerspaces, eine sich selbst nähende Organisationsform ohne den Overhead an Schulen und Universitäten. Ein Hackerspace ist ein physischer, meist auch offener Raum, in dem sich Hacker sowie allgemein an Technologie Interessierte treffen und austauschen können. Hackerspaces werden in der Regel von Vereinen getragen. Die Anbahnung findet meist über soziale Netzwerke statt. Im deutschsprachigen Raum haben es z.B. die c-base in Berlin, das RaumZeitLabor in Mannheim, der Chaos Computer Club Göttingen, der Attraktor in Hamburg oder das Metalab in Wien zu überregionaler Bedeutung gebracht.
Noch populärer im englischsprachigen Raum sind der NYC Resistor in New York oder die Noisebridge in San Francisco. Eine Liste weltweit aktiver Hackerspaces liefert unter anderem das Projekt hackerspaces.org. Hier findet sich ein umfassendes Verzeichnis weltweit existierender oder geplanter Hackerspaces. Hackerspaces bringen nicht selten erfolgreiche Startups hervor und das weitgehend ohne Bürokratie und ohne das, was der US-amerikanischer Philosoph Ralph Waldo Emerson's 1848 in seinem berühmten Buch "Self-Reliance" (Selbständigkeit) mit "A foolish consistency is the hobgoblin of little minds" umschreibt. Die Vorteile von Hackerspaces liegen nicht nur bei den sozialen und finanziellen Zugangsvoraussetzungen: Hackerspace-Kurse müssen nicht ein ganzes Semester dauern und Studenten müssen auch nicht ein Jahr oder länger allein für die Zulassung büffeln.
Code lesen dank Open-Source
Möchten Sie sich das Programmieren selbst beibringen, können Sie zweifelsohne zentnerweise Dokumentationen und Bücher lesen. Sind Grundkenntnisse vorhanden, ist das Lesen von aktuellen Code-Beispielen meist viel effizienter, insbesondere wenn diese gut dokumentiert sind. So finden Sie beispielsweise heraus, ob der Programmierer viel Aufwand investiert, Dinge in kleine Klassen herunter zu brechen, die ihrerseits für kleine Teilaspekte zuständig sind oder ob die gewählte Architektur Raum für Erweiterungen lässt. All solche Fragen lassen sich durch das Lesen von Code beantworten. Und: die Möglichkeit dies tun zu können, ist ein weiterer wichtiger Aspekt von Open-Source-Projekten. Das Mitwirken bei einem Open-Source-Projekt kann sich übrigens auch als wichtiger Faktor bei der Job-Suche erweisen.
Vergessen Sie Hadoop
Big Data ist in aller Munde. Fällt in den Chefetagen unserer Unternehmen allein das Wort, reagieren Manager und Schlipsträger euphorisch und fragen Sie nach der besten und größten Big-Data-Lösung, als ginge es um den Kauf einer Yacht oder eines Hochhauses. Das Verrückte daran ist: die meisten Probleme sind schlicht nicht groß genug, um den Einsatz einer Big-Data-Lösung zu rechtfertigen.
Sicher, Google und Yahoo tracken unser aller Surf-Verhalten und hantieren dazu mit Dateien im Petabyte-Bereich. Auch die NSA hat sicher einen Bedarf an der Beschäftigung von Big-Data-Spezialisten. Die meisten heutigen IT-Probleme haben allerdings mit Datenmengen zu tun, die problemlos ins RAM eines Desktop-PCs passen. Bei den meisten Algorithmen ist es zudem überhaupt nicht notwendig, Daten in den Arbeitsspeicher zu laden, weil das Streamen von SSDs wunderbar funktioniert. Sicher gibt es Situationen, die die Antwortzeit von dutzenden parallel rechnenden Knoten einer Hadoop-Cloud erfordern, aber bei den meisten Problemen der Gegenwart genügt eine einzige Maschine.
Nicht das Rad neu erfinden
Die Programmiersprache Scala ist das prominenteste Beispiel einer Sprache, die viele Vorzüge hat, das Rad aber nicht in jedem Punkt neu erfindet. Scala-Programme sind beispielsweise in der Lage Java-JARs ansprechen. Das gilt auch umgekehrt. So können Scala-Programmierer beispielsweise sämtliche existenten Java-Bibliotheken und -Frameworks in ihre Projekte einbinden und nutzen. Das gilt sogar für die meisten Tools und Entwicklungsumgebungen wie Eclipse oder NetBeans.
Es ist noch gar nicht so lange her, da mussten Entwickler bei einer neuen Programmiersprache quasi immer bei null anfangen. Dann kamen kluge Leute auf die Idee, dass es viel effizienter ist, auf die Arbeit aufzusetzen, die anderen schon geleistet haben. Also schreibt man eine Art Präprozessor, der neuen Code lediglich in etwas umsetzt, wofür es bereits APIs und Bibliotheken gibt. Werfen Sie beispielsweise einen Blick auf Groovy, eine einfachere Version von Java, ohne aufwendige Syntax. Groovy ist eine Programmier- und Skriptsprache mit Unterstützung für dynamische und statische Typisierung.
Bei genauerem Hinsehen gibt es heute dutzende von Sprachen - auch Scala oder Clojure zählen dazu - die in einer JVM laufen. Dies garantiert unter anderem eine schnelle, quasi sofortige Verfügbarkeit für zahlreiche Plattformen. Speziell bei Groovy ging es den Entwicklern primär darum, eine wenige kantige und komplexe Variante der Java-Syntax mit Konzepten von Ruby zu verbinden. Ein weiteres interessantes Beispiel für einen Quasi-Präprozessor ist CoffeeScript. CoffeeScipt ist eine Programmiersprache, die nichts anderes macht, als in CoffeeScript geschriebenen Code in JavaScript zu trans-kompilieren.
JavaScript-Frameworks nutzen
Vor langer Zeit mussten Web-Entwickler beispielsweise ein JavaScript-Popup schreiben, nur um etwa zu prüfen, ob eine vom Nutzer eingegebenen E-Mail-Adresse die korrekt Form hat. Aktuelle AJAX-Anwendungen sind in dieser Hinsicht ziemlich ausgeklügelt. Für die meisten Web-Programmierer dürfte es aber weitaus einfacher sein, für solche Dinge ein durchdachtes Web-Framework zu verwenden und an die eigene Business-Logik zu kleben. Davon gibt es Dutzende, um mit Kendo, Backbone.js, Sencha, jQuery Mobile, AngularJS, Ember, Meteor JS nur Einige zu nennen.
CSS-Frameworks nutzen
Früher war es für Programmierer, wollten Sie Ihrer Webseite etwas mehr Pepp verleihen, Gang und Gäbe, die CSS-Datei zu öffnen und dort die benötigten Kommandos einzufügen. Heutige Web-Anwendungen sind allerdings meist so komplex strukturiert, dass eine solche Vorgehensweise nahezu unmöglich geworden ist, denn ein einziger misslungener Tweak kann schnell die ganze Anwendung unbrauchbar machen. Das ist auch der Grund, dass sich CSS-Frameworks wie Gumby, SASS oder sein Couisn Compass in der Web-Entwickler-Gemeinschaft großer Beliebtheit erfreuen. SASS (Syntactically Awesome Stylesheets) beispielsweise ist eine Stylesheet-Sprache, die ebenfalls als Präprozessor fungiert und das Erzeugen von Cascading Stylesheets erleichtert. SASS und Compass beherrschen verschachtelte Regeln (nested rules). Damit ist es recht einfach, komplizierte geschachtelte Selektoren zu lesen und zu schreiben.
Verzichten Sie auf Flash
Über viele Jahre waren Anwender und Entwickler geradezu verrückt nach Flash. Vor allem Letztere übertrafen einander mit aufwendigen und mitunter verspielten Designs. Fraglos sorgt der Antialiasing-Renderer von Flash für ein schickes Aussehen von mit Flash gestalteten Seiten und Flash-Entwickler bringen mitunter ausgeklügelte Transitionen und Animationen zu Stande. Auf der anderen Seite sind die Tage von Flash gezählt und die Nachteile hinlänglich bekannt. Überdies besitzt der JavaScript-Layer in Zeiten von HTML5 und der oben genannten JS-Frameworks alle Fähigkeiten von Flash-gestürzten Seiten und darüber hinaus. Zudem bietet JavaScript eine bessere Integration mit dem DOM-Layer.
Zusammen mit dem SVG-Format (Scalable Vector Graphics) und HTML5 steht Entwicklern ein reichhaltiges Repertoire an Tags zur Verfügung, die zudem weitaus einfacher handhabbar sind. Die zugrunde liegenden APIs bieten durchdachte Funktionen zum Zeichnen von Canvas-Objekten, meist sogar ohne direkte Unterstützung der Grafikkarte.
C++-zu-JavaScript Compiler
Für viele Entwickler ist es einfacher, Ihre Geschäftslogik mit traditionellen Programmiersprachen wie C++ zu verfassen. Soll eine solche Anwendung internetfähig gemacht, also als Client/Server-orientierte Web-Anwendung realisiert werden, kann der Code mit Hilfe von Tools wie Mozillas LLVM-zu-JavaScript-Compiler Emscripten konvertiert werden. Emscripten ist in der Lage, LLVM-Assemblercode in Standard-JavaScript zu konvertieren, unterstützt aber auch andere Programmiersprachen. Dabei kommen je nach Sprache verschiedene Wege der Umsetzung zum Einsatz.
Eine Möglichkeit besteht darin, den Sourcecode direkt von LLVM-Bytecode in JavaScript zu übersetzen. Das funktioniert beispielsweise mit C/C++. Es kann aber auch die Ausführungsumgebung der Programmiersprache in JavaScript übersetzt werden. Diese kompilierte Ausführungsumgebung kann dann dazu verwendet werden, den eigentlichen Code der jeweiligen Programmiersprache auszuführen. Obwohl bei Emscripten der Fokus auf C/C++ liegt, lassen sich mit dem Tool eine ganze Reihe von Programmiersprachen verwenden. Der Port der Unreal 4 Engine auf JavaScript wurde beispielsweise mit Emscripten realisiert.
Brandaktuell und in direkter Konkurrenz zu Emscripten steht das Projekt Duetto. Dieses wurde von dem Unternehmen Learning Technologies erst Ende letzten Jahres erstmals präsentiert. Vor wenigen Tagen wurde eine erste stabile Version 1.0 der inzwischen in Cheerp unbenannten Software zum Download freigegeben. Cheerp ist ähnlich wie Emscripten ein Compiler, der C++-Code in JavaScript umwandeln kann und wahlweise in einer Open-Source-Version oder als kommerzielles Angebot für Linux, Windows und Mac OS X verfügbar.
Mit Cheerp können Sie in C oder C++ verfassten Code zur Verwendung als Web-Anwendung komfortabel in JavaScript-Apps integrieren. Eine in C++ verfasste Methode kann dann recht einfach mit Hilfe des [[client]]-Tags in eine JavaScript-App eingebettet werden, um dann die Browser-API aus dem Client Namespace ansprechen. Cheerp braucht dazu im Gegensatz zu Emscripten keinen Wrapper und ermöglicht damit echte bidirektionale Interoperabilität zwischen C/C++- und JS-Code. So können Sie mit Cheerp beispielsweise Ihre in C++ verfasste Geschäftslogik mit einer JavaScript-Oberfläche ausstatten. Cheerp bringt zudem eine reguläre Clang/GCC-Schnittstell mit und fügt sich so nahtlos in bestehende Toolchains ein. Darüber hinaus verwendet Cheerp dynamischer Speicherverwaltung und unterstützt JavaScript-Source-Maps. Dies erlaubt ein komfortables Debuggen.
Web Apps mit Responsive Design
Wer erinnert sich noch an die Zeit, da URLs eine statische Website mit Text und Bildern referenzierten? Ein idyllischer Gedanke, einfache sämtliche bereitzustellenden Informationen in ein Netzwerk separater Seiten zu packen, die in Ihrer Gesamtheit dann als Web-Aufritt oder allgemein eine Website bezeichnet wurden. Heutige Web-Anwendungen sind in der Regel lediglich Frontends für Datenbanken, aus denen der eigentliche Content Nutzer- und Fall-abhängig generiert wird. Braucht eine Web-Anwendung Informationen, holt sie sich diese aus der Datenbank und presst sie in die vorgebebene Darstellungsform.
Es besteht keine Notwendigkeit, diese Daten mit all den Extras, die man zum Bau einer modernen Website benötigt, in einen direkten Zusammenhang zu bringen, denn der Daten-Layer wird bei modernen Web-Projekte isoliert und unabhängig von der eigentlichen Formatierung und Präsentation der Daten behandelt. Dabei spielt auch die zunehmende Verbreitung von Mobile Computing eine wichtige Rolle. Eine Webseite sollte daher heute über ein einfaches responsives Design verfügen, das sich automatisch an den Formfaktor des Endgerätes anpasst und sich wie eine App verhält. Damit lässt sie sich auch problemlos über einen App-Store distribuieren.
Mobile Web-Apps
Haben Sie eine großartige Idee für eine mobile Anwendung? Dann sollte Sie separate Versionen für iOS, Android, Windows 8 oder vielleicht BlackBerry OS schreiben. Allerdings brauchen Sie für jede Plattform mitunter andere Programmiersprachen und Frameworks. Außerdem sind die App Stores der einzelnen Plattformen sehr unterschiedlich. Sie könnten aber damit beginnen, erstmal eine reine HTML-App zu bauen und auf einer Webseite anzubieten, die alle Plattformen bedient. Das erleichtert Ihnen auch die Pflege von Bug-Fixes und Korrekturen. Dabei kann die HTML-Ebene aufgrund schnellerer Chips durchaus mit nativen mobilen Apps konkurrieren.
Entwickeln im Webinterface
Vor langer Zeit arbeiteten Programmierer mit einem kommandobasierten Compiler. Später setzte sich der Trend durch, diesen zusammen mit einem Fullscreen-Editor und weiteren Tools zu einer so genannten integrierten Entwicklungsumgebung (IDE) zusammen zu schnüren. Jetzt ist die Zeit gekommen, dass IDEs zu browserbasierten Werkzeugen mutieren. Werfen Sie einen Blick auf das beliebte CMS Wordpress. Das System bringt einen eigenen, eingebauten Editor mit, der es erlaubt, den Code des eigenen Web-Projektes direkt zu bearbeiten. Microsoft Azure erlaubt sogar das direkte Schreiben von JavaScript-Code. Zwar bieten diese Lösungen nicht gerade die besten Debugging-Möglichkeiten und es ist auch nicht ganz ungefährlich, den Code eines Produktivsystems direkt bearbeiten zu können, aber die Idee ist zweifelsohne gut.
Superstar Node.js
In der modernen Web-Programmierung ist Node.js nicht mehr weg zu denken und momentan der absolute Star und den Programmiersprachen. Bei Node.js handelt es sich allgemein um eine serverseitige Plattform zum Betreiben von Netzwerkanwendungen. Node.js kommt aber schon lange nicht mehr nur zum Implementieren von Webservern zum Einsatz. Der Vorteil gegenüber der konventionellen Entwicklung von Web-Anwendungen besteht vor allem in der ereignisgesteuerten Architektur, die auf Serverseite pro bestehender Verbindung wesentlich weniger Arbeitsspeicher beansprucht und damit eine sehr große Anzahl gleichzeitig bestehender Netzwerkverbindungen erlaubt. Sonst wird üblicherweise für jede geöffnete Verbindung ein eigener Thread gestartet, was einen enormen Overhead verursacht. Node.js beruht auf der JavaScript-Laufzeitumgebung "V8". Die wurde ursprünglich von Google für seinen Chrome-Browser entwickelt.
Android statt iOS
Wenn Sie schon native mobile App entwickeln möchten, dann sollten Sie dies für die Android-Plattform tun. Erinnern Sie sich, dass iPhone, iPad und Apples App Store erst vor wenigen Jahren das Licht der Welt erblickten und schnell zur führenden Mobil-Plattform wurden? Niemand redete zu dieser Zeit mehr von Nokia mit seinem Symbian-Betriebssystem. Doch die Zeiten ändern sich. Zwar begeistern iPhone und iPad Fans mit Ihrer stylischen und ausgeklügelten Oberfläche, aber die Gesetzte des Marktes haben sich den letzten zwei bis drei Jahren zunehmend zu Googles Android-Plattform verschoben.
Heute werden je nach Studie mehr als 70 Prozent aller Mobiltelefone mit Android verkauft. Der Grund dafür liegt vor allem beim Preis. Während iOS-Geräte durchweg im Premium-Preissegment angesiedelt sind, gibt es Android-Geräte in allen Preisklassen. Android-Tablets sind mitunter schon für die Hälfte der Kosten eines iPads zu haben. Es spricht aber noch ein anderer Faktor für das Open-Source-System. Externe Hardware-Hersteller können ohne große Hindernisse im Markt aktiv werden. Der Anteil an Geräten von Google ist sogar relativ gering.
Game-Engines nutzen
Total "out" ist die native Spiele-Entwicklung. Früher bedeutete Spiele-Entwicklung für die darauf spezialisierten Softwarefirmen, in großer Zahl Entwickler anzuheuern, weil so ziemlich alles "from scratch" in C programmiert werden musste. Dies verursachte zudem beträchtliche Kosten. Heute können sich die Software-Hersteller den Luxus gar nicht mehr erlauben, Custom-Code zu schreiben.
Die meisten Spiele-Programmierer nutzen heute Game-Engines in Form von Bibliotheken, wie Unity3D, Corona oder LibGDX. C-Code wird im Prinzip überhaupt nicht mehr geschrieben. Stattdessen basieren heute viele Spiele auf der gleichen Game-Engine. Die meisten Programmierer sind darüber natürlich erleichtert, weil sich nicht mehr mit Details befassen müssen, sondern sich auf Ihre Spiele-Logik, das Implementieren von Charakteren und so weiter konzentrieren können, sowie auf künstlerische Aspekte.
GPU-Programmierung
Früher war Software meist relativ einfach strukturiert und alle Instruktionen wurden von der CPU, dem König des Motherboards in der Regel schön hintereinander abgearbeitet. Heute stellen vor allem Video Spiele mit ihren extensiven Grafik-Routinen ganz andere Anforderungen an die Hardware. Daher werden Grafik-Routinen bei aktuellen Spielen in der Regel von der GPU der Grafikkarte parallel ausgeführt. Sie können heute problemlos 500 bis 600 Euro in eine Grafikkarte investieren, wodurch der Preis des PCs um nahezu das Doppelte steigt. Spieler schrecken vor einer solchen Investition kaum zurück und wetteifern untereinander um die beste und leistungsfähigste GPU-Karte. Inzwischen arbeiten IT-Wissenschaftler aber daran, viele parallele Applikationen so zu konvertieren, dass sie mit GPU-Unterstützung bis zu hundert Mal schneller ausgeführt werden als bei ausschließlicher CPU-Nutzung. (sh)