[CENTER]Hallo Freunde der Internetz Community,
Da jedes Mal, wenn ich dieses Forum besuche mindestens 1 Thread offen ist nach dem Motto: "Was für ne Programmiersprache soll ich denn lernen für bla und bla", dachte ich mir ich schreibe mal einen Leitfaden in dem ich versuche näher zu bringen welche Programmiersprache welche Bedürfnisse erfüllt.
Ich versuche keine Sprache zu beschönigen oder Leute von einer Speziellen zu überzeugen, ich werde sofern es mir möglich ist besten Wissens und Gewissens die Vor- und Nachteile einiger Sprachen zu beleuchten.
Ich bin jetzt kein Hardcore Programmier-Guru, der jede der unzähligen Programmier- und Scriptsprachen kennt und werde mich daher auf die Sprachen eingehen die ich kenne, und die auch wohl die Bekanntesten sein sollten.
[COLOR="Red"]Wenn ihr der Meinung seid, ich habe eine Sprache vergessen schreibt das doch einfach und ich werde versuchen diese mit einzubringen.[/COLOR]
[SIZE="4"]Vorwort:[/SIZE]
Programmieren ist einfach mit Befehlen dem Computer zu sagen was er machen soll. Es ist ein bisschen wie Kochen: Wenn ich weiß wie ich was zu machen habe, kann ich einzigartige Dinge erschaffen oder ich kann mich auch einfach an das Rezept halten und es wird das rauskommen wie es in dem Rezept beschrieben ist.
Genauso wie jemand der gerne kocht kein Koch werden muss, muss jemand der gerne programmiert das auch nicht unbedingt beruflich machen.
Daher befasst sich dieser Leitfaden mit dem standardmäßigem Haushaltsgebrauch. Ich werde auch nur entwickelnde Hochsprachen anführen, denn z.B. ASM ist für den 0815-Entwickler genauso hilfreich wie dem Papst sein Ding-Dong.
Genauso befasst sich dieser Leitfaden nur mit der Anwendungsentwicklung, da es für die Webentwicklung kaum Alternativen zu den Standards gibt.
Grundsätzlich kann man mit fast jeder Sprache fast alles erreichen. Zumindest für den typischen Anwendungsentwickler.
Ich selbst habe mich nur mit 2 Programmiersprachen intensiv befasst und zwar Visual Basic.Net und Delphi.
Ich hatte aber noch nie das Problem, dass ich für etwas eine andere Sprache bräuchte.
Ihr denkt nun wohl: "Ja was ist das überhaupt für ein Hampelmann und was hat der überhaupt schon gemacht, dass er uns was erzählen könnte".
Ich bin Fred, aktuell 20 Jahre alt, studiere Informatik und programmiere seitdem ich 12 Jahre alt bin.
Ich habe jetzt nicht grade die größte Erfahrung der Welt, aber habe mich doch schon durch viele Bereiche der Programmierung bewegt, von Gamehacks über Utility-Tools für den Standard PC-Gebrauch zu Netzanwendungen, Verschlüsselungen und auch sogar zur Grafik Entwicklung mit DirectX und OpenGL und habe wie gesagt noch nie das Bedürfnis verspürt die Programmiersprache zu wechseln.
Was ich mit diesem etwas längeren Abschnitt deutlich machen will ist, sucht euch eine Programmiersprache die euch liegt, euch gefällt, und damit solltet ihr eigentlich alles machen können was euch lieb ist.
Einige Programmiersprachen bieten Vorteile auf einem Gebiet, Nachteile auf einem Anderen, und für manche Dinge sind einige Sprachen schon weit aus besser als Andere.
Und damit kommen wir zu dem wahrhaft interessanten Teil
[SIZE="4"]Was sind meine Bedürfnisse:[/SIZE]
Im Folgenden stelle ich ein paar Fragen, die ihr euch selbst stellen solltet und nach denen ihr dann die Wahl einer Programmiersprache treffen solltet.
[SIZE="3"]1.: Verständnis oder Produktivität[/SIZE]
[SPOILER]Eine Frage der Lernkurve, wollt ihr wirklich wissen was hinter dem Ganzen steht oder wollt ihr schnell gute Ergebnisse erzielen?
Sprachen mit großer Standard-Bibliothek oder gar Frameworks, sowie Scriptsprachen nehmen dem Entwickler viel Arbeit mit vorgefertigten Methoden, Definitionen etc. und erleichtern das Programmieren ungemein. Die Schattenseite daran ist allerdings, das dadurch das Verständnis hinter dem Ganzen verloren geht, wenn man einfach eine Listenklasse benutzt lernt man nie wie eine Pointerliste überhaupt aufgebaut ist und durch vorgefertigte Thread oder Socket klassen bewegt man sich immer weiter von der Benutzung der System API's und dem systemnahen Programmieren weg.
Ein weiteres Thema dieses Bereiches ist z.b. der Garbage Collector und Zeiger. Viele moderne Sprachen wie z.b. Sprachen des .NET Frameworks besitzen kaum Unterschiede zwischen Zeiger, Variablen und Fixen und durch den GC wird automatisch der Speicher wieder bereinigt. Eine Sache die wirklich sehr hilfreich ist, aber dafür kein Verständnis von Heap und Stack, und der ganzen Zeigerlogik vermittelt.
Ich habe mit Visual Basic angefangen und muss sagen, es ist sehr angenehm, diese ganzen Vorteile zu haben, doch dafür lernt man halt relativ wenig über die Funktionsweise.
[/SPOILER]
[SIZE="3"]2.: Große oder kleine Projekte[/SIZE]
[SPOILER]Ich muss zugeben bei dieser Frage schummel ich ein wenig, es ist mit jeder Sprache möglich sowohl große als auch kleine Projekte zu erstellen, aber es gibt sprachen mit denen ist es einfach wesentlich einfacher den Überblick zu behalten.
Mit Scriptsprachen wie z.b. AutoIt lassen sich extrem schnell, ziemlich gut kleine Programme umsetzen, da bei diesen auf die Typisierung von Variablen und andere Syntax Einschränkungen der meisten nativen Sprachen umgangen werden. Das führt aber schnell dazu, dass man den Überblick über Variablen und ihren Inhalt, sowie Typen etc verliert. Je geordneter und strikter die Syntax einer Sprache, desto einfacher lässt sich der Überblick behalten.
Objektorientierung ist auch ein weiterer wichtiger Punkt, die Auslagerung von Code in Objekte wirkt dem undurchsichtigen Spagetti Code entgegen und wenn eine Sprache oop (Objektorientierte Programmierumg) gut unterstützt ist diese natürlich auch weitaus übersichtlicher.
Und zuletzt noch eine Sache die ich persönlich bei größeren Projekten wichtig finde ist das Überladen von Operatoren, so kann man die Standardbefehle wie "+", "-", "*", "/", "=", ">" etc. so definieren das sie auf bestimmte Klassen und Typen auch anwendbar sind (z.B. Vektoren).
Das Fazit daraus ist, wer schnell kleine Programme, Bots etc. schreiben will, für den sind wohl Scriptsprachen gut geeignet. Bei größeren Projekten sind diese aber teilweise zu unübersichtlich, und da tritt leicht Chaos im Code auf.
[/SPOILER]
[SIZE="3"]3.: Plattform[/SIZE]
[SPOILER]Tatsächlich gibt es für fast jede Sprache einen Port/Compiler für andere Plattformen, doch nicht bei allen ist es unbedingt sehr einfach.
Hier ist es auch wieder eine Frage der Standard Bibliotheksgröße, bzw. der Bibliotheken die für mehrere Plattformen verfügbar sind. So laufen Scriptsprachen, die interpretiert werden oder Frameworksprachen auf jedem System auf dem es den Interpreten oder das Framework gibt, fast gleich. Bei nativen Sprachen muss man entweder dann die entsprechend anderen System API's benutzen oder sich Cross-Bibliotheken, die auf mehreren Systemen funktionieren runterladen (die Standard Libs die der Compiler mitliefert laufen auf allen Systemen auf dem der Compiler läuft. D.h. ein Compiler mit großer Standard Lib ist für Crossplattform daher von Vorteil).
[/SPOILER]
[SIZE="3"]4.: IDE, Compiler, Libs und Community[/SIZE]
[SPOILER]Je mehr Optionen einem die IDE und der Compiler bieten, umso mehr Bibliotheken es zum Download gibt, und je größer die Communities sind, desto einfacher ist das Leben als Programmierer. Viele Communities gehen je nach Sprache in eine bestimmte Richtung, so wird man zur iPhone oder Mac-OS Entwicklung eine riesige Objective-C Community finden. Aber wenn es an die Linux-Entwicklung geht grenzt sich die obj-c Com. schon ziemlich stark ein (Ich weiß nicht mal ob es eine gibt).
Daher sollte man vor allem drauf achten bei der Wahl der Sprache: 1. Gibt es eine gute IDE die am Besten auch noch kostenlos ist und 2. Gibt es für das was ich machen will überhaupt Support und Bibliotheken mit denen ich meine Probleme schnell lösen kann.[/SPOILER]
[SIZE="3"]5.: Syntax[/SIZE]
[SPOILER]Dieser Punkt ist schnell abgearbeitet, aber meiner Meinung nach doch schon sehr wichtig. Die Syntax einer jeden Programmiersprache ist anders und es kommt rein auf deine Preferenzen an, welche Syntax dir am Besten liegt. Ich persönlich mag die Typische C-Syntax einfach nicht und war daher nie ein Freund von z.b. Java, C# oder C++. Genauso wenig mag ich die Python-Syntax, bei der Blöcke über Tab-Abstände definiert werden, genauso wie ich den Groß- und Kleinschreibunterschied in vielen Sprachen zum Kotzen finde.
Die Syntax ist zu 100% Geschmacksache und da lasst ihr euch am besten von Niemanden etwas einreden[/SPOILER]
[SIZE="4"]Die Sprachen:[/SIZE]
So nun der essenzielle Teil. Hier werde ich nun einige Sprachen auflisten mit den Attributen die zu den oben gestellten Fragen gehören.
Nochmal: Ich führe hier nur Nutzsprachen an, so werden so Sachen wie ASM, C und Fortran weg gelassen.
Python:
[SPOILER]Python ist eine Scriptsprache, die mittlerweile schon einen recht großen Umfang bietet. Mit Python lassen sch einfach und schnell Programme verwirklichen. Auch größere Projekte, allerdings kann hier auch auf Grund fehlender Typisierung schnell Chaos auftreten und das tracen von Code zur Hölle werden. Es gibt eine große Reihe IDE's von freien Entwicklern. Die Meisten sind kostenlos und/oder Open-Source. Python wird größtenteils interpretiert und es gibt Interpreten für fast jedes System.
Python kommt vor allem stark in der Linux-Welt vor und so ist in dem Bereich vor allem eine große Community und Support erreichbar. Nichts desto trotz auch eine gute Wahl für andere Systeme, da Python mittlerweile überall schon Anklang findet.
Gut nutzbar für Automatisierung von Prozessen, kleineren bis mittelgroßen Programmen und vor allem problemlos nutzbar auch auf nicht typischen Rechnern wie z.b. dem ARM-Debiansystem des Raspberry Pies.
Weitere Infos auf:
[URL="https://www.python.org/"]python.org[/URL]
Gute Nutzmöglichkeiten: Kleine bis mittelgroße Scripts und Programme, vorallem unter Linux[/SPOILER]
AutoIt
[SPOILER]Eine Sprache auf die ich auch erst durch Netzcommunities wie z.B. e*pvp aufmerksam wurde. Der Name der Sprache ist Programm, eine kleine aber stetig wachsende Scriptsprache, die meines Wissens nach mittlerweile sogar schon OOP unterstützt (noch nicht so viel genutzt, aber es ist möglich) mit der es super einfach ist kleine Programme und Scripts zum Automatisieren von Vorgängen oder für Bots verwendet werden kann. Fehlende Typisierung und vor allem eine ganze Menge Spagetti-Code macht sie allerdings bei größeren Projekten auch schon ungeeigneter.
Die Community habe ich bisher tatsächlich fast ausschließlich auf Boards wie e*pvp beobachten können. Aber man bekommt zu fast jedem Problem schnell Hilfe.
Weitere Infos auf:
[URL="https://www.autoitscript.com/site/autoit/"]autoitscript.com[/URL]
Gute Nutzmöglichkeiten: Kleinere Scripts und Bots[/SPOILER]
.NET (C# und VB.Net)
[SPOILER]Ich habe hier die beiden Haupt-DotNet Sprachen C# und VB.Net mal zusammen gelistet, da man diese auch kaum trennen kann.
Mit dem .NET hat Microsoft ein sehr umfangreiches Framework zur Entwicklung von Windows-Anwendungen erstellt. Die die .NET Sprachen nur teils kompiliert werden und dann von einem Runtime Environment ausgeführt werden laufen sie schneller als rein interpretierte Scriptsprachen und bieten dennoch Komfort durch vereinfachte Funktionen, eine großartige und kostenlose IDE, einen GC, und dem Wegfallen der ganzen Zeiger. Noch dazu baut das gesammte .NET auf OOP auf und so ist alles objektorientiert. Selbst Integer oder Byte Typen sind Objekte. DotNet ist einfach zu lernen und man kann schnell große Erfolge erzielen. VB.Net bietet außerdem noch die Möglichkeit, die Typisierung von Variablen wegzulassen und damit die relativ strickte Syntax ein wenig aufzubrechen. ABER das ist sehr sehr unsauberes Programmieren und dafür werdet ihr in jedem VB forum zugeflamet. Mit dem Mono Framework gibt es sogar die Möglichkeit .NET Programme unter Linux zum Laufen zu bringen. Wie gut das funktioniert weiß ich aber nicht (nutze kein Linux).
Die Community ist vielseitig vertreten, sowohl in Deutsch als auch in Englisch vor allem im Microsoft Developer Network Forum (msdn Forum) bekommt man immer schnelle Hilfe.
Und btw: VB Code lässt sich 1 zu 1 in C# Code umwandeln, einfach nur eine Frage des Syntax-Geschmacks.
Mehr Infos unter:
[URL="http://msdn.microsoft.com/de-de/library/"]msdn.microsoft.com[/URL]
Gute Nutzmöglichkeiten:
Mittelgroße - Große Projekte, vor allem unter Windows, sowie DX Spiele-Entwicklung[/SPOILER]
C++
[SPOILER]C++ ist die meist verbreitetste OOP "Erweiterung" von C. C++ Compiler werden von verschiedenen Firmen und Personen entwickelt und so kommt es das jeder Compiler andere Vorzüge hat und andere Dinge kann. Theoretisch kann ich auch einfach einen AutoIt-Compiler bauen und den C++ Compiler nennen, und es wäre gültig. Damit sowas aber nicht vorkommt ist C++ eine genormte Sprache. Ein Komitee (ich glaube die ISO) hat die Grundlagen von C++, dazu gehören Syntax und Standardbefehle, genormt, sodass jeder Compiler der sich ISO C++ nennen will diese Bedingungen erfüllen muss. Zu den großen Entwicklern gehören u.a. Embarcadero, Microsoft und die leute vom GCC-Team.
Genauso wie es Compiler wie Sand am Meer gibt, gibt es auch IDE's bis zum geht nicht mehr. Gute sind / waren (ist ne Zeit her, dass ich zuletzt mit C++ befasst habe) das Microsoft Visual Studio, Embarcadero/Code Gear C++ Builder, XCode von Apple, und die Open-Source Software Eclipse.
Es gibt für fast jedes System einen Compiler und eine IDE, was C++ Entwicklung auf jeder Plattform möglich macht.
Im Standard C++ ist die komplette Speicherverwaltung manuell zu erledigen und es gibt kaum vorgefertigte Methoden, Klassen und Typen, muss also sehr viel Arbeit selbst verrichten und sehr system- und hardwarenah entwickeln. Das sorgt natürlich dafür, dass man zu Anfang kaum große Ergebnisse zu verzeichnen hat, aber sich viel intensiver mit dem System auseinander setzen muss. Wenn systemnah entwickelt wird sind Programme von System zu System natürlich auch komplett unterschiedlich und so kann man kein Programm das WinSocks benutzt auf Linux kompilieren und so wird Crosscompiling teilweise relativ schwer.
Da C++ schon so alt ist und dennoch so beliebt gibt es im Internet sehr viele Bibliotheken und Tools, mit denen das Entwickeln unter C++ auch einfach wird. Viele dieser Libs sind auch Crossplattform verfügbar. Zur Community lässt sich im Allgemeinen sagen, dass diese fast alle Bereiche abdeckt, von MSDN welche die Nutzung der Win API's anhand C++ Beispiele erklärt, bis hin zu dem kleinsten Coding Forum. Überall sind C++ Anhänger zu finden.
Gute Nutzmöglichkeiten: Große Projekte, Systemverständnis, Spieleentwicklung
[/SPOILER]
Objective-C
[SPOILER]Auch eine OOP C erweiterung, die aber nicht mal ansatzweise so bekannt oder beliebt ist. Früher von selbständigen Entwicklern entwickelt, wurde diese Sprache bald von NeXT (Unternehmen von Steve Jobs) aufgegriffen und in das GCC Projekt integriert und bildet nun die Grundlage der MacOSX und iOS Entwicklung. Objective C weist viele Eigenschaften von C++ auf, nur da es unter OSX Systemen mit dem Cocoa Framework läuft bietet es einfache Möglichkeiten zur schnellen und effektiven Entwicklung von Programmen unter OSX. So gibt es sowohl das Zeigersystem, aber auch einen GC und einfache Möglichkeiten UI's zu bauen.
In Objective C kann man sowohl C als auch C++ Code benutzen.
Die Haupt IDE ist XCode von Apple und als Compiler wird der GCC genutzt (beide kostenlos). Die Community beschränkt sich vor allem auf die Apple Entwicklung und ich würde auch niemandem raten etwas anderes damit zu machen.
Mit Objective C lassen sich sowohl schnell große Projekte erstellen, das aber ein großes Verständnis des Systems vorraussetzt.
Als Syntax Vorlage hat die Sprache Smalltalk gedient, die eine der ersten OOP Sprachen war, was eine ziemlich eigene Syntax zur Folge hat.
Mehr Infos:
[URL="https://developer.apple.com/"]developer.apple.com[/URL]
[COLOR="Red"]Hinweis: Objective C unterscheidet sich sowohl syntaktisch als auch von der Nutzung der IDE und den Cocoa Objekten stark von gängigen Programmiersprachen, ein Umlernen fällt zu Anfang immer schwer.[/COLOR]
Gute Nutzmöglichkeiten: Mittelgroße bis große Projekte, sowie Spieleentwicklung auf OSX und IOS.
[/SPOILER]
Java
[SPOILER]Java ist eine der gängigsten Programmiersprachen. Java Programme werden genauso wie beim .NET vorkompiliert und später mit dem JRE (Java Runtime Environment) ausgeführt. Da die JRE auf wirklich fast jedem System läuft (Navis, Autoradios, gängigen Betriebsystemen, und...und..und) kann man ein Java Programm mit keinen oder kaum Änderungen auf jedem System verwenden. Dadurch geht allerdings auch jede Systemnähe flöten, und das Systemverständnis wird nicht vorausgesetzt.
Java ist genau wie das .NET von Grund auf objektorientiert und bietet somit feste Strukturen, die helfen die Übersicht zu bewahren. Und mit einfachen Tools wie dem GC ist das Lernen der Sprache auch ziemlich leicht und man erzielt schnell Ergebnisse.
Als gute IDE gibt es Eclipse, ein solides, erweiterbares Programm, welches von Haus aus allerdings nicht so sehr viele Tools beinhaltet.
Die Community von Java ist auch relativ groß und es sollte sich für alle Probleme schnell eine Lösung finden lassen.
Vor Allem wird Java in der Android-Entwicklung genutzt und ist für diese Systeme auch die wohl beste Wahl. Die Systemunterstützung ist top, und der Netzsupport ist gigantisch.
Weiteren großen Anteil findet Java im Web, da mit Java auch Webcontent produziert werden kann. Dies ist aktuell vor allem im privaten Gebrauch aber ziemlich rückläufig, Firmen hingegen nutzen Java immernoch viel in vielen Bereichen (CMS Systeme, Radio Systeme, Handy Systeme, etc.).
Mehr Informationen:
[URL="http://www.oracle.com/technetwork/java/javase/overview/index.html"]Java SE[/URL]
Gute Nutzmöglichkeiten:
Mittelgroße bis große Projekte für multiple Plattformen, Webcontent, Android-Entwicklung.
[/SPOILER]
Delphi/Pascal
[SPOILER]Delphi oder Object Pascal ist sowie C++ eine native objektorientierte Programmiersprache. Im Gegensatz zu C++ wird diese aber hauptsächlich nur von Embarcadero entwickelt (früher Code Gear und Borland) und so gibt es auch nur eine wirkliche Delphi Version. Das Free Pascal Project ist ein Opensource Projekt, welches einen Object Pascal Compiler, der dem Original Delphi sehr nahe kommt, dafür aber kostenlos und plattform-unabhängig ist.
Zu Delphi gehört die VCL, Visual Component Library, welche eine sehr umfangreiche Bibliothek die sowohl sehr viele Möglichkeiten zur Entwicklung von grafischen Programmen (UI's) bietet, als auch sehr viele Methoden, Objekte und Typen die Standardaufgaben zusammenfassen und vereinfachen. Dazu gehören z.b. Listen, Klassen oder Streamklassen, sowie vereinfachte Einbindung der Win API. Die VCL ist teilweise vergleichbar mit dem .NET oder dem Cocoa Framework, muss allerdings auf dem Nutzcomputer nicht installiert sein, ist aber auch nicht so umfangreich wie das .NET. Durch die Möglichkeit der systemnahen Entwicklung und Einbindung von Inline Assembly ist es möglich auch Systemverständnis aufzubauen, fällt allerdings hinter dem von z.b. C++ zurück.
Delphi besitzt keinen GC und hat auch ein explizites Zeigersystem, ist daher auch nicht ganz so komfortabel.
Die Syntax von Delphi ist sehr strikt und somit hat alles seinen vorgegeben Platz. Kann oftmals sehr anstrengend und nervend sein, hilft aber auch der Übersichtlichkeit. Die Syntax ist nicht für jeden etwas.
Als IDE gibt es die Delphi IDE von Embarcadero/Borland oder das Open-Source Projekt Lazarus, welche beide vergleichbare Möglichkeiten bieten. Sowohl bei beiden gibt es die oben angeführte Component Lib.
Da Delphi eine Nieschensprache ist, gibt es auch auf eigenen Delphiseiten einen großen Support, der vor allem im deutschen Raum sehr groß ist. Es gibt auch eine sehr große Community zur Grafik- und Spieleentwicklung mit OpenGL, die DGL Community ist glaube ich die größte deutsche OpenGL Community. Dieser beschränkt sich zumeist allerdings fast nur auf die Windowsentwicklung und andere Plattformen stehen eher außen vor.
Mehr Informationen:
[URL="http://www.delphi-treff.de/"]delphi-treff.de[/URL]
Gute Nutzmöglichkeiten:
Mittelgroße - große Projekte, vor allem unter Windows, sowie OGL Spiele.[/SPOILER]
[SIZE="4"]Nachwort:[/SIZE]
Nun ich habe hier bei Weitem nicht alle Sprachen aufgeführt, doch das sind so die Großen die mir wichtig erscheinen. Wenn ihr noch andere kennt einfach posten, ich werde versuchen diesen Thread hier zu erweitern.
Für alle die jetzt anfangen wollen mich, meine Mutter, meine Herkunft oder Ähnliches zu beleidigen, weil ich ihre Lieblingssprache nicht als die Beste der Welt dargestellt habe, an die sag ich an dieser Stelle mal: Chillt, ich habe versucht keine Sprache besonders gut oder besonders schlecht darzustellen, nur so wie ich sie am besten geeignet beschreiben würde.
Ich hoffe ich kann damit Manchen helfen, denn mich kotzen diese andauernden Threads an, die dann in einer 3 seitigen Diskussionsrunde ausarten in der der TE selbst nicht mehr mitliest.
_____________________________________
Im Nachhinein entschuldige ich mich noch für meine Orthografie, ich schreibe da nun die letzten beiden Tage immer nachts dran, wenn mein Gehirn nicht auf der vollen Höhe ist[/CENTER]
Korrigiert
(Nur Rechtschreibung und Grammatik.)