[[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/develop.png, 48, align=left)]] Jeder, der intensiv mit dem Computer arbeitet, wünscht sich irgendwann einmal, selbst ein Computerprogramm schreiben zu können. Sei es, weil die Anwendung, die man bräuchte, einfach (noch) nicht vorhanden ist oder weil ein bestimmter Ablauf bzw. eine bestimmte Aufgabe automatisiert und damit vereinfacht werden soll. Als Programmiereinsteiger steht man dann üblicherweise vor mindestens zwei Fragen: * Wie mache ich das? * Welche Programmiersprache nehme ich? Dieser Artikel soll hierzu eine Einführung bzw. Hilfestellung geben. = Programmieren und Übersetzen = Eine Programmiersprache ist das Werkzeug, um für ein Rechensystem (z.B. einem Computer) zu beschreiben, wie Information be- bzw. verarbeitet werden sollen. Das fertige Produkt wird [wikipedia:Quelltext:] (engl. Sourcecode) genannt. Anschließend wird der Quelltext für ein Rechensystem übersetzt, sodass dieses ihn verstehen und ausführen kann, wobei verschiedene Übersetzungstechniken zum Einsatz kommen können. Die drei wichtigsten Übersetzungstechniken sind: == Compiler == Der [wikipedia:Compiler:] ist eine Software, die den vollständigen Quelltext in Maschinensprache übersetzt. Maschinensprache besteht aus Instruktionen, welche ein Rechensystem direkt ausführen kann. Für den Menschen ist dieser "Binärcode" aber ohne weiteres nicht mehr lesbar. Der Übersetzungsvorgang wird "Kompilieren" genannt. == Interpreter == Der [wikipedia:Interpreter:] übersetzt den Quelltext nicht in die Maschinensprache. Hingegen liest er den Quelltext ein, analysiert ihn und führt die enthaltenen Instruktionen aus. Dadurch erhält der Quelltext eine gewisse Plattformunabhängigkeit, da nur noch der Interpreter auf andere Rechensysteme portiert werden muss. Diesen Vorteil bezahlt man aber häufig mit Rechenleistung (= geringere Geschwindigkeit). Um diesen Geschwindigkeitsverlust abzuschwächen, wird der Quelltext oft per Compiler in plattformunabhängigen Bytecode übersetzt. Diesen Bytecode kann ein Interpreter viel schneller verarbeiten. Sprachen, die einen Interpreter verwenden, werden auch Skriptsprachen genannt. == JIT-Compiler == Der [wikipedia:JIT-Compiler:Just-in-Time-Compiler] stellt den Kompromiss zwischen Compiler und Interpreter dar. Er funktioniert wie ein Interpreter – mit einem Unterschied, denn er übersetzt bei Bedarf den Bytecode in die Maschinensprache. Dadurch, dass der JIT-Compiler den momentanen Zustand des Rechensystems kennt, kann er schnelleren Maschinencode erzeugen als ein normaler Compiler, der nur statischen Code erzeugt. Die Übersetzung in Maschinensprache zur Laufzeit kostet dennoch Leistung, die aber nur einmal aufgewendet werden muss und bei weiteren Durchläufen des selben Programmabschnitts entfällt. = Welches ist "die beste" Sprache? = Auf diese Frage gibt es keine gültige Antwort. Wie in den weiter unten folgenden Kurzvorstellungen beschrieben, lassen sich mit den meisten Sprachen Probleme aller Arten lösen bzw. Programmen schreiben. Weiterhin ist es so, dass es nicht so schwer ist, eine zweite Progammier- oder Skriptsprache zu erlernen, wenn man bereits eine andere beherrscht, die in die gleiche Sprachkategorie fällt (objektorientierte / funktionale / logische / imperative Programmierung), da bestimmte Sprachelemente in allen Sprachen einer Gruppe in ähnlicher Form vorhanden sind. Außerdem kommt es beim Programmieren auch stark auf die richtige Strukturierung und Herangehensweise an ein bestimmtes (Programmier-) Problem an. Die richtige Strukturierung und Vorgehensweise ist meistens für alle Sprachen gleich wichtig und weitestgehend unabhängig von der konkreten Sprache, nicht aber von der Sprachklasse. Am besten liest man im Internet ein paar Einsteiger-Tutorials zu den verschiedenen Sprachen oder schaut in der Buchhandlung entsprechende Bücher an, um sich einen besseren Eindruck zu verschaffen und so die Entscheidung zu vereinfachen. Übrigens: egal, für welche Sprache man sich entscheidet – es wird sicherlich keine Fehlentscheidung sein. = Sprachen = == awk == Der Interpreter [:awk:] zählt zum Urgestein der Unix-Werkzeuge. Er wird auch heute noch vielfach zusammen mit [:sed:] in Shell-Skripten eingesetzt, um Textdateien zu bearbeiten, umzuformen oder auszuwerten. Die Leistungsfähigkeit und Kompaktheit, aber auch die Beschränkungen von awk- und sed-Skripten führten zur Entwicklung der Sprache [:Perl:]. == C == [wikipedia:C_(Programmiersprache):C] ist eine relativ alte Programmiersprache, welche seit den frühen 70ern existiert. C entstammt aus dem Unix-Umfeld und ist unter Linux immer noch die "Hauptsprache". So sind z.B. der komplette [:Kernel:Linuxkernel] und [:GNOME:] sowie viele weitere Programme komplett in C programmiert. Mehr Information zu C/C++-Compilern gibt es hier: [:GCC:] (GNU C/C++-Compiler) == C++ == [wikipedia:C++:] ist eine Erweiterung zu C, der Programmierparadigmen wie [wikipedia:Objektorientierte_Programmierung:Objektorientierung] oder [wikipedia:Generische_Programmierung:Generische Programmierung] hinzugefügt wurden und ist somit mit C quasi kompatibel. C++ ist auf vielen Plattformen inkl. Linux sehr häufig anzutreffen. Prominentes Beispiel unter Linux ist [:KDE:], welche komplett in C++ bzw. mit Hilfe der C++-Bibliothek [wikipedia:Qt_(Bibliothek):Qt] geschrieben ist. Mehr Information zu C/C++-Compilern gibt es hier: [:GCC:] (GNU C/C++-Compiler) == C# == [wikipedia:C-Sharp:C#] ist eine im Jahr 2000 von der Firma Microsoft entworfene objektorientierte Programmiersprache für die [wikipedia:.NET:]-Plattform. C# wurde in Konkurrenz zu Java entwickelt und weist dementsprechend viele Ähnlichkeiten zu Java auf, greift aber auch Konzepte von C++ und Visual Basic auf. C# Programme werden in einen plattformunabhängigen Bytecode umgewandelt, der dann von einem Interpreter ausgeführt werden kann. Um Programme mit C# zu entwickeln und laufen zu lassen, gibt es für Linux (u. a.) das [wikipedia:Mono-Projekt:]. Beispiele für in C# geschriebene Programme sind das Notizprogramm [:Tomboy:] und die Fotoverwaltung F-Spot. == Go == [wikipedia:Go_(Programmiersprache): Go] ist eine seit 2009 von Google entwickelte plattformunabhängige, bedingt objektorientierte und kompilierte Programmiersprache mit automatischer Speicherbereinigung und Kompatiblität zu C. Go ähnelt syntaktisch C++/Java, bringt aber einige Neuerungen wie einfache nebenläufige Programmierung, Typsicherheit und erweiterte Funktionsdeklaration mit. Zur Zeit werden Compiler für Linux, Mac OS X und experimentell auch für Windows bereitgestellt. Go befindet sich noch in der Entwicklung und ist deshalb noch nicht so weit verbreitet wie beispielsweise C++. Weitere Details sind im Artikel [:Go:] zu finden. == Groovy == [wikipedia:Groovy:Groovy] ist eine neue agile Programmiersprache, deren Programme in Java Bytecode übersetzt werden. Ihre Syntax wurde von Java entnommen und durch Konzepte aus Ruby, Python und Smalltalk erweitert. Groovy zeichnet sich dadurch aus, dass sowohl Groovy innerhalb von Java als auch in Java geschriebene Klassen und Methoden innerhalb von Groovy benutzt werden können. Außerdem können Groovy-Programme sowohl interpretiert als auch kompiliert werden. Weitergehende Informationen gibt es hier: [:Groovy:]. == Haskell == [wikipedia:Haskell_(Programmiersprache):Haskell] ist eine [wikipedia:Funktionale_Programmiersprache#Rein_funktionale_Programmiersprachen:rein funktionale Programmiersprache], deren erste Version 1990 veröffentlicht wurde. Die verbreiteste Implementierung ist der Glasgow Haskell Compiler (GHC). Weitere Informationen und Beispiele sind im Artikel [:Haskell:] beschrieben == Java == [wikipedia:Java_(Programmiersprache):Java] ist eine plattformunabhängige, objektorientierte Programmiersprache, die dem Prinzip WORA (Write once, run anywhere) folgt. Die Syntax orientiert sich teils an C++, sodass ein Umstieg nicht sehr schwer fällt. Die Plattformunabhängigkeit von Java ist besonders hervorzuheben, da z.B. unter Linux geschriebene Programme auch unter MacOS oder Windows laufen. So ist z.B. [:Vuze:] in Java programmiert. Weitergehende Informationen gibt es hier: [:Java:]. == Julia == [wikipedia:Julia_(Programmiersprache):Julia] ist eine höhere Programmiersprache, die zwar universell eingesetzt werden kann, aber deren Fokus primär auf nummerischem und wissenschaftlichen Rechnen liegt. In Julia geschriebene Programme haben eine hohe Ausführungsgeschwindigkeit. Weitere Informationen sind im Artikel [:Julia:] zu finden. == Lisp == [wikipedia:Lisp:] ist eine funktionale Programmiersprache dessen erste Spezifikation bereits im Jahre 1958 durchgeführt wurde. Lisp ist die Abkürzung für '''Lis'''t '''P'''rocessing und arbeitet daher hauptsächlich mit Listen. Eine freie Implementation von Lisp ist [:clisp:]. == Lua == [wikipedia:Lua:] ist eine Skriptsprache, welche sich durch einen besonders kleinen und dadurch extrem schnellen Interpreter auszeichnet. Lua-Skripte können vom Interpreter direkt ausgeführt werden, es ist aber auch möglich, Lua als Bibliothek in C einzubinden. Mehr Informationen gibt es hier: [:Lua:]. == Pascal == [wikipedia:Pascal_(Programmiersprache):Pascal] wurde in den 70ern als Lehrsprache entwickelt und legt viel wert auf Einfachheit und strukturierte Gestaltung. Sie ist nicht so stark verbreitet, dennoch gibt es mit [wikipedia:GNU_Pascal:GNU Pascal] und [:Free_Pascal:Free Pascal] zwei freie Implementierungen für Linux. Unter Windows ist die visuelle Programmierumgebung [wikipedia:Borland_Delphi:Delphi] recht populär, die Linux-Version [wikipedia:Kylix:] wurde eingestellt, stattdessen gibt es jedoch eine freie plattformunabhängige Implementierung namens [:Lazarus:], mit einer Komponentenbibliothek für bekannte [:GUI-Toolkits:]. == Perl == [wikipedia:Perl:] ist eine Skriptsprache, die seit Mitte der achtziger Jahre existiert. Zwei "Schlagworte" (bzw. Phrasen) von / für Perl sind, dass es in Perl immer mehr als einen Weg gibt ein (Programmier-) Problem zu lösen und dass "einfache" Probleme / Aufgaben sich auch mit einfachen Programmen lösen lassen. Weitergehende Informationen gibt es hier: [:Perl:]. == Python == [wikipedia:Python_(Programmiersprache):Python] ist eine recht universelle Skriptsprache, welche weiterhin im Ruf steht, relativ einfach und strukturiert zu sein. Zudem ist Python nicht auf einen bestimmten Programmierstil (wie z.B. objektorientiert oder funktional) festgelegt. So sind z.B. der [:Network-Manager: GNOME-Network-Manager] oder auch die [http://ubuntuusers.de/inyoka Inyoka Plattform], welche von ubuntuusers.de verwendet wird, komplett in Python geschrieben. Weitergehende Informationen gibt es hier: [:Python:]. == Ruby == [wikipedia:Ruby_(Programmiersprache):Ruby] (engl. für Rubin) ist eine interpretierte, objektorientierte Programmiersprache, die mehrere weitere Programmierparadigmen (Prozedurale Programmierung, Funktionale Programmierung, Nebenläufigkeit) unterstützt. Da Ruby wie Perl und Python eine Interpretersprache ist, muss der Programmcode vor der Ausführung nicht kompiliert werden. Weitergehende Informationen gibt es hier: [:Ruby:]. == Shell-Skripte == Die Shell (oft auch [:Terminal:] genannt) dient zwar in erster Linie zum Arbeiten mit und am (Datei-)System, ist aber voll [wikipedia:Shell-Skript:skriptfähig]. Dazu bringt die Shell eine eigene Skriptsprache mit. Diese ist grundsätzlich gleich für die [:Shell:verschiedenen Shells]. Shell-Skripte eignen sich primär für alle Aufgaben rund um das System sowie dessen Verwaltung, sind aber nicht zwingend darauf beschränkt. == Webanwendungen == Will man eine reine Webanwendung schreiben, so eignen sich hierfür eventuell [wikipedia:JavaScript:] oder [:PHP:] besser. Da beides aber "spezialisierte" Sprachen sind, erfolgt hier keine weiterführende Betrachtung. == Weitere Programmiersprachen == Außer den oben genannten Programmiersprachen gibt es noch eine große Vielzahl anderer Programmier- und Skriptsprachen. Dazu zählen u. a.: * [wikipedia:BASIC:Basic] * [wikipedia:D_(Programmiersprache):D] * [wikipedia:Fortran:] * [:Tcl:] * [:Vala:Vala und Genie] * [:R:] und noch viele andere. Wie bereits in der Einleitung erwähnt, beschränkt sich dieser Artikel auf die (unter Linux) "gängigsten" Sprachen. = Links = == Intern == * [:Entwicklungsumgebungen:] - Integrated Development Environments (IDEs) für die Programmierung * [:Editoren:] - Editoren, mit denen man auch Quellcode bzw. Skripte schreiben kann * [:Programmierung:] {Übersicht} Übersichtsartikel * [:Links/Programmierung:] == Extern == * [wikipedia:Liste_von_Hallo-Welt-Programmen/Höhere_Programmiersprachen:"Hallo Welt"-Programme] - Kurze Codebeispiele für eine Vielzahl von Programmier- und Skriptsprachen * [http://www.cpp-entwicklung.de/cpplinux3/cpp_main/cpp_main.html "C++-Entwicklung mit Linux"] {de} - Eine Einführung in die Sprache und die wichtigsten Werkzeuge von GCC und XEmacs bis Eclipse * [wikipedia_en:Comparison_of_programming_languages:Umfangreicher Vergleich] von Programmiersprachen beim englischen Wikipedia * [http://theowoll.netau.net/benchmark.html Benchmark Ergebnisse] {en} für sehr viele Programmiersprachen # tag: Einsteiger, Programmierung