Leserartikel Programmieren für Anfänger

Tumbleweed

Captain
Registriert
März 2008
Beiträge
3.598
Häufig gestellte Fragen zum Thema
Programmieren


Um den ständig wiederkehrenden Fragen Herr zu werden, möge dieses FAQ in Zusammenarbeit der User wachsen und als Anlaufstelle für Neulinge im Bereich der Programmierung dienen. Diese Zusammenstellung erhebt keinen Anspruch auf Vollständigkeit und penible Korrektheit, auch wenn dies angestrebt wird. Viel mehr soll sie Stichworte liefern, die das eigene Suchen erleichtern.
Vor allem wird aber Wert auf Neutralität gelegt. Es soll niemand bekehrt werden bzw. niemandem vorgeschrieben werden, welche Sprache er zu lernen hat oder welche Entwicklungsumgebung er benutzen soll. Es handelt sich nur um Empfehlungen, die auf eigenen Erfahrungen und zahlreichen Threads hier im Board beruhen.

Man findet in vielen (unseriösen) Programmiererforen (nahezu religiös anmutende) Auseinandersetzungen, welche nun die beste Sprache sei. Nach Lesen dieses FAQs, sollte die Frage hoffentlich nicht mehr unter den Nägeln brennen.
Natürlich ist Kritik willkommen und Mitarbeit zu weiteren Themenbereichen im ausdrücklich erwünscht.

Eigentlich verstehen Maschinen nur ihre ganz eigene Sprache - die Maschinensprache, auch Binärcode genannt. Sie wird in der Regel mit Nullen und Einsen dargestellt, welche die kleinste Einheit darstellen - das so genannte Bit. Dabei steht eine Null für false/unwahr und eine Eins für true/wahr. Diese winzigen Bauteilen lassen sich verketten, sodass sie komplexere Informationen darstellen können.

Da diese Sprache für den Menschen nur sehr schwer verständlich ist, gibt es viele Programmiersprachen, jede mit ihrer eigenen Abstraktionsstufe. Man spricht dabei von low-level, wenn die Sprache sehr systemnah ist und high-level bzw. Hochsprachen, wenn man mit den Interna des Systems nur noch wenig zu tun hat, sondern nur noch ganz abstrakt die Logik des Programms formuliert.

Sehr systemnahe Sprachen sind die so genannten Assemblersprachen. Es gibt nur sehr wenige Programmierer, die sich tatsächlich auf dieser Abstraktionsebene bewegen. Diese Sprachen erfordern sehr umfangreiches Verständnis für die Funktionsweise der Maschine.

Der erste große Sprung führt dann hin zu Sprachen wie C, in denen man bereits leichter verständliche Befehle benutzt, so genannte keywords. Diese entstammen dem Englischen, weshalb man sich als angehender Programmierer früh damit abfinden sollte, viel mit englischen Wörtern und Texten konfrontiert zu werden.

An C, in dem noch rein Prozedural programmiert wird, orientierten sich, zumindest syntaktisch, viele der modernen Hochsprachen.
Die weit verbreitete Sprache C++ ermöglicht (so wie auch Objective-C) als Obermenge von C die Objektorientierte Programmierung (OOP), ein sehr praxis-relevantes, modernes Programmierparadigma. OOP setzt, stark vereinfacht gesagt, auf Verkapselung und Wiederverwendbarkeit von Code. Dabei wird großer Wert darauf gelegt genau zu bestimmen welche Objekte miteinander interagieren können.
Verschiedene Sprachen bieten die Verwendung verschiedener Paradigmen an. Die eben genannten Sprachen C, C++ und Objective-C zählen zu den imperativen Sprachen. D.h. man beschreibt mit ihnen ganz konkret wie eine Berechnung ausgeführt wird.
Einen anderen Ansatz verfolgen Sprachen, welche die deklarative Programmierung erlauben. In jenen geht es darum zu beschreiben was berechnet werden soll. Mit diesem Paradigma kommt man vor allem während Studiengängen in Kontakt, die mit der Informatik verwandt sind. Ein praxisrelevantes Beispiel einer deklarativen Sprache ist SQL. Mit SQL beschreibt man, welche Daten man von einer Datenbank abfragen möchte. Wie diese Abfrage umgesetzt wird, bestimmt das Datenbankmanagementsystem (DBMS).
Die nächste Stufe bilden die Sprachen, die als managed bezeichnet werden und auf virtuellen Maschinen ausgeführt werden. Bei diesen Sprachen wird der Programmierer nicht einmal mehr mit der Verwaltung des Speichers belastet. Ein garbage collector (GC) erledigt die automatische Speicherbereinigung. Das heißt nicht, dass man vor den gefürchteten Speicherlecks (memory leaks) gefeit ist, reduziert aber die Gefahr erheblich.

Stellt sich also abschließend die Frage - wie versteht die Maschine plötzlich so viele Sprachen, obwohl sie eigentlich nur 0 und 1 kennt? Es gibt Übersetzer! Diese kann man ganz grob in Compiler und Interpreter unterteilen. Wie so oft gibt es aber auch hier nicht nur Schwarz und Weiß, sondern etwas Grau dazwischen auch. So gibt es zwischen Compilern (auch Ahead-of-time-Compiler genannt), die vor Ausführung übersetzen und Interpretern, die gar nicht übersetzen, sondern einfach nur "vermitteln", auch noch Just-in-time-Compiler (JIT). Die Vorteile letzterer werden in dem Artikel gut beschrieben.
Ist das etwa nicht das Gleiche? Zumindest verbindet man das im allgemeinen Verständnis so sehr miteinander, dass automatisch die Frage nach der Sprache aufkommt. Programmieren ist allerdings ein weites Feld und ein stark vereinfachter Begriff für das, was in der Regel damit gemeint ist.
Als Neuling auf dem Gebiet der Softwareentwicklung, muss man einige Konzepte verstehen, die für erfahrene Programmierer so selbstverständlich sind, dass sie, wenn sie versuchen einem Neuling das Programmieren zu erklären, völlig vergessen, welche Grundlagen dem Neuling fehlen, um alles verstehen zu können.
Analog dazu stellen sich einige unter einem Informatikstudium einen intensiven Programmierlehrgang vor. Dem ist aber nicht so. Programmiersprachen können als reines Handwerkszeug betrachtet werden, mit denen man mit Maschinen kommunizieren kann. Dabei ist es egal, ob es sich um einen konventionellen PC, ein Smartphone, einen kleinen Roboter oder einen Autopiloten in einem Flugzeug handelt.

Man sollte sich daher bevor man loslegt überlegen, was man eigentlich erreichen möchte und wie umfangreich man in die Materie einsteigen möchte. Es wird Anfängern vereinzelt nahegelegt besonders grundlegend und abstrakt einzusteigen. So wirbt z.B. unser Boardie asdfman eifrig mit SICP und empfiehlt auch gern Programmiersprachen, die alles andere als "mainstream" sind. Der Vollständigkeit halber nehme ich diesen Ansatz gern in dieses FAQ auf, gebe aber zu bedenken, dass einen Neuling bei einer solch grundlegenden Herangehensweise nicht unbedingt das erwartet, was er sich unter Programmieren vorstellt. Es wird vermutlich länger dauern, bis er zu den Ergebnissen gelangt, die seiner eigenen Vorstellung entsprachen, er wird allerdings dadurch seine Programmierlaufbahn auf einem äußerst soliden Fundament aufbauen und anderen Programmierern teilweise etwas voraus haben.
Das dürfte mit Abstand die meist gestellte Frage des Programmieren-Boards sein. Die Antwort auf die zweite Teilfrage fällt leicht – es gibt keine beste Sprache. Alle Sprachen haben Eigenheiten, Vor- und Nachteile. Die Kriterien sind dabei zahlreich und müssen für jedes Vorhaben individuell abgewägt werden. Beispiele:

  • Performance
  • Portabilität/Zielplattform
  • Fehleranfälligkeit bzw. Fehlertoleranz
  • Komfort
  • Lesbarkeit
  • Wartbarkeit (Unit Testing, integrierte Möglichkeiten zur Dokumentation)
  • Verfügbare Bibliotheken (bereits bestehender Code, der als Hilfsmittel dienen kann)
  • Benötigte Hardwarenähe
  • Kompaktheit des Codes vs. hoher Bedarf an „boilerplate code“
Genau das ist auch der Grund, warum es keinen Sinn ergibt, sich auf eine bestimmte Sprache zu versteifen. Viel sinnvoller ist es, die Prinzipien der Programmierung zu erlernen und somit ein flexibler Programmierer zu werden.
Einige Sprachen sind auch gar keine Programmiersprachen im eigentlichen Sinn, obwohl sie ebenfalls Schlüsselbegriffe (keywords) und teilweise auch gängige Konstrukte wie Schleifen, Datenstrukturen und Verzweigungen enthalten, die dem Benutzer bekannt sein müssen. Darunter fallen Beschreibungssprachen wie HTML, CSS und XML, Skriptsprachen wie PHP, Lua und Abfragesprachen wie SQL.

Wenn man eine simple Website erstellen möchte, dann reicht es völlig aus, sich mit HTML und CSS zu beschäftigen. In diesem Fall wird man mit Programmierung nicht in Berührung kommen, sondern man beschreibt nur, wie die Website strukturiert ist (HTML) und wie sie formatiert ist (CSS).
Möchte man die Website allerdings dynamischer gestalten, mit beweglichen Elementen oder anspruchsvollen Oberflächen mit Fenstern und Drag&Drop-Funktionalität, dann kommt man an JavaScript nicht vorbei. Möchte man abgesehen vom statischen Inhalt auch noch dynamische Inhalte bieten, dann heißen die wichtigsten Kandidaten PHP, JSP in Verbindung mit Servlets oder auch ASP.Net.
Möchte man Anwendungen (darunter fallen auch Spiele) entwickeln, die bestimmte Aufgaben auf der ausführenden Maschine erledigen, dann muss man sich für eine Programmiersprache entscheiden bzw. eine Skriptsprache wählen, für die auch ein Interpreter verfügbar ist, um den Code unabhängig von einem Webserver auszuführen.
Die wichtigsten Kriterien wurden bereits aufgezählt. Hinzu kommt noch die grundlegende Unterscheidung zwischen Sprachen, die vor Ausführung direkt in Maschinensprache übersetzt werden (unmanaged) und Sprachen, die nur in eine Art Zwischensprache, meist byte code genannt, übersetzt werden, die dann auf einer VM (virtual machine) ausgeführt wird.
Damit verbunden ist in der Regel auch der grundlegende Unterschied, dass bei managed code das Speichermanagement von der VM übernommen wird, während bei unmanaged code der Programmierer gezwungen ist, sich selbst darum zu kümmern. Da moderne VMs sehr optimiert sind (und immer weiter optimiert werden), werden die Geschwindigkeitsnachteile gegenüber manuellem Speichermanagement immer geringer und die geringere Fehleranfälligkeit des managed codes überwiegt.
Wikipedia bietet eine enorm umfangreiche Auflistung bekannter Programmiersprachen. Es folgt eine kleine Auswahl der etablierten Sprachen zur Anwendungsentwicklung, um die Wahl zu erleichtern:

  • C
  • C++
  • C#
  • Java
Wenn man nun diese sehr reduzierte Auswahl noch weiter vereinfachen will und managed code mit Speichermanagement den Vorzug gibt, bleiben die 2 Kandidaten Java und C# übrig. Das ist im Übrigen auch die Essenz aus unzähligen Threads zu dieser Frage.
Die endgültige Entscheidung zwischen diesen beiden Sprachen, soll hier nicht abgenommen werden. Diskussionen dazu enden im besten Falle mit der Erkenntnis, dass weder das eine noch das andere eine schlechte Wahl ist. In vielen Fällen entbrennt eher eine religiöse Auseinandersetzung fanatischer Anhänger der Sprachen. Davon sollte man sich aber nicht beeindrucken lassen, sondern einfach an den bereits genannten Kriterien festhalten. Wer gerne einen direkten Vergleich sehen möchte, dem sei dieser Artikel empfohlen, wobei auch dabei erwähnt sei, dass solche Vergleiche oft subjektiven Einflüssen unterliegen.
Mikro…was? Ja, abseits von der Software, die man täglich bewusst benutzt, gibt es noch mehr. Geräte aller Art wollen auch gesteuert werden. Dazu hat Verata folgenden Abschnitt verfasst. Vielen Dank dafür!

Welche Geräte kann ich programmieren?
Prinzipiell fast alle! Vom Radiowecker über das Auto bis hin zum Atomkraftwerk wird alles letztendlich von Chips gesteuert, die programmierbar sind. Diese sogenannten Microcontroller bringen in einem einfachen Chipgehäuse (5mm² aufwärts) bereits alles mit, was einen Computer ausmacht, also eine Befehlsverarbeitung, ein Rechenwerk, einen Hauptspeicher und einen Massenspeicher. Alles ist lediglich deutlich kleiner. Man muss sich also mit einem Massenspeicher von 1kb anfreunden. Da diese Controller keinerlei Ein- und Ausgabe haben, brauchen sie eine sogenannte Peripherieschaltung. Mit etwas Erfahrung kann man sich die selbst bauen. Für Anfänger finde ich vor allem die Arduino Boards empfehlenswert. Sie werden in einer eigenen Entwicklungsumgebung mit einem C Dialekt programmiert. Für den Arduino gibt es sogenannte Shields, die man auf die Hauptplatine stecken kann um die gewünschte Hardwarefunktionalität zu bekommen. Für Anfänger ist das zu empfehlen, weil es einem die Beschäftigung mit der Elektronik erspart. Wer mehr will, findet es hier.
Nachdem man sich mit einigen Tutorials bzw. Büchern beschäftigt hat, gerät man oft in die unangenehme Situation nicht so recht zu wissen, was man mit dem erworbenen Wissen anfangen könnte.
Ein hier im Forum vorgestelltes Projekt befasst sich genau mit dieser Problematik. Wenn man voller Ideenlosigkeit steckt, dann ist diese Seite sicher einen Besuch wert und hoffentlich wird sie sich noch weiterentwickeln und wachsen.
Auch hier gibt es verschiedene Ansichten. Immer wieder liest und hört man, dass vor allem ältere Lehrer/Professoren dazu raten, nur mit einem simplen Editor zu arbeiten. Die Idee dahinter soll sein, dass der Anfänger gezwungen ist ganz genau darauf zu achten, was er da tippt. Auch das Kompilieren des Codes per Kommandozeile wird in diesem Fall nahegelegt. Dieser Ansatz ist zwar nachvollziehbar, hat allerdings auch Nachteile. Einige der Nachfragen hier im Programmieren-Board würden sich erübrigen, würde der Fragende eine bessere Entwicklungsumgebung benutzen.

Welche Alternative gibt es also? Die Antwort lautet – IDE (integrated development environment). Solche Entwicklungsumgebungen bieten in der Regel zumindest:

  • syntax highlighting, also farbliche Unterscheidungen innerhalb des Codes
  • integrierte Compiler-Anbindung, d.h. Kompilieren und Starten per Knopfdruck und Hinweise auf Fehler bereits während des Schreibens des Codes
  • code assistance, wohinter sich eine automatische Vervollständigung von keywords und bekannten Methoden-/Variablennamen verbirgt
  • einen debugger, der erlaubt, Code Schritt für Schritt abzuarbeiten und dem Entwickler dabei Einblick in den aktuellen Zustand des Programms gewährt. Ein unverzichtbares Werkzeug für effiziente Entwicklung
Je nach Größe der IDE gibt es noch unzählige weitere Funktionen, die für den Anfänger nicht relevant sind, aber dem professionellen Programmierer das Leben deutlich erleichtern.

Es gibt sowohl IDEs, die mehrere Sprachen unterstützen, als auch solche, die sich nur auf eine bestimmte Sprache spezialisiert haben. Da in diesem FAQ C# und Java empfohlen werden, seien hier auch ein Paar entsprechende Kandidaten auf Seite der IDEs genannt:

Speziell für die Entwicklung auf dem Mac gibt es von Apple eine IDE namens Xcode zur Softwareentwicklung für Mac OS X und iOS (mit den Sprachen Objective-C oder neuerdings Swift). Darüber hinaus ist auch die plattformübergreifende Entwicklung mit anderen Sprachen wie C, C++, Java, Python und weiteren möglich.
Es gibt im Programmieren-Board einen angepinnten Thread, in dem zahlreiche Links zusammengetragen wurden. Darauf sei an dieser Stelle verwiesen.
Immer langsam mit den jungen Pferden! Das wollen viele, die in das Programmieren-Board stolpern. Es ist durchaus sinnvoll sich Ziele zu setzen, aber die Programmierung von Spielen ist etwas für fortgeschrittene Programmierer, die bereits mit den wichtigsten Konzepten der Programmierung vertraut sind.
In der Tat kann man auch recht früh an kleinen, konsolenbasierten Spielen arbeiten. Man sollte sich allerdings von der Illusion lösen, innerhalb von wenigen Wochen seinen eigenen First-Person-Shooter zu programmieren. Wenn man erst einmal zumindest die Grundlagen erlernt hat, gibt es durchaus einige Möglichkeiten besonders schnell in die Spieleprogrammierung einzusteigen. Beispiele dafür sind (frei verfügbare Versionen von) Engines, in denen man nur noch die Spiellogik scripten muss. Sämtliche komplizierte Arbeit wird von solchen Engines (bzw. Frameworks) im Hintergrund erledigt.

Prominente Beispiele hierfür sind:

Es drängt sich die Vermutung auf, C# bzw. C++ wären dafür attraktiver als Java. In der Tat hat sich Java eher auf der Seite der Server etabliert. D.h. man wird oft auf Spiele-Clients treffen, die in C++ geschrieben bzw. mit C# oder einer Skriptsprache gescripted wurden. Das schließt aber nicht aus, dass diese mit Servern kommunizieren, die in Java geschrieben wurden. Außerdem ist Java im Bereich (Spiele-)Entwicklung für Mobiltelefone sehr gut etabliert.

Abschließend sei nochmals darauf hingewiesen, dass eine solide Grundlage absolut erforderlich ist, um erfolgreich zu Programmieren, auch wenn es schwer ist, Geduld zum Erlernen aufzubringen. Besonders für Spiele ist die Verinnerlichung des Prinzips der Objektorientierten Programmierung (OOP) unabdingbar, um effizient entwickeln zu können.
Auch diese Frage taucht von Zeit zur Zeit mal wieder auf, vor allem im Zuge der Berichterstattung über großangelegte „Hackerangriffe“ in den Medien. Obwohl Hacker wohl in der Regel Erfahrung mit der Programmierung haben, ist dies keinesfalls zwingend notwendig und noch viel weniger erlaubt es den Umkehrschluss, Programmierer wären automatisch nur einen Katzensprung davon entfernt in fremde Systeme einbrechen zu können.
Hacker (bzw. Cracker) können sich einer Auswahl berüchtigter und im Netz verfügbarer Tools bedienen und sind damit nicht unbedingt gezwungen selbst Schadsoftware zu programmieren. Vor allem aber müssen Hacker sich mit den Feinheiten von Netzwerken und den dazugehörigen Protokollen auskennen und sie müssen in der Lage sein, ihre eigenen Spuren zu verwischen.
An dieser Stelle sei ausdrücklich davon abgeraten mit im Netz verfügbarer Schadsoftware herumzuspielen! Das Internet ist kein rechtsfreier Raum und Cyberkriminalität ist strafbar![1,2,3]

Und bevor es losgeht, eine kleine Ansammlung von guten Ratschlägen und Weisheiten, die es für alle Beteiligten angenehmer machen:

  • Sauber arbeiten und Code kommentieren/dokumentieren
    • dabei gilt es zu beschreiben warum ein Stück Quellcode tut, was es tut. Was es tut, erkennt jeder erfahrene Programmierer selbst
  • Es standen schon viele Programmierer vor den gleichen Problemen wie du, daher findest du für die meisten konkreten Probleme auch schnell Lösungen. Solltest du tatsächlich keine Antwort finden, dann darfst du natürlich im Forum fragen, aber:
    • Gib dir Mühe beim Beschreiben deines Problems (genaue Umstände, Fehlermeldungen, reproduzierbarer Fehler?)
    • Lass ruhig deinen Wissensstand durchscheinen, kein falscher Stolz! Man weiß sonst nicht wie ausführlich man dir antworten muss.
    • Erwarte nicht, dass andere dir dein Programm schreiben. Programmierer erwarten von anderen Programmierern ausreichende Eigeninitiative, bevor um Hilfe gebeten wird. Sei also auch mit Stichwörtern zufrieden, die dich auf den richtigen Weg bringen!
    • Wenn du nicht genau weißt, wo der Fehler liegt in deinem Code, dann stelle so viel davon zur Verfügung, wie möglich. Das erleichtert den Helfern die Suche. Ganz wichtig ist: benutze
      Code:
      -Tags und formatiere deinen Code vernünftig! 
      [/LIST]
                      
      [/LIST]
       [/spoiler]
      [spoiler=Versionsverwaltung]
      Es empfiehlt sich bei größeren Projekten, sich mit [URL="http://de.wikipedia.org/wiki/Versionsverwaltung"]Versionsverwaltung[/URL]  anzufreunden. Wenn man im Team programmiert umso mehr, aber auch als  Einzelner macht man manchmal Fehler und hat den Code dann so sehr  verändert, dass man nicht mehr zum letzten funktionierenden Stand  zurückkehren kann. Man benötigt  dazu:
      [LIST]
      [*]Einen Versionsverwaltungs-Client (es gibt in der Regel auch Clients mit GUI, nicht nur per Konsoleneingabe) 
      [*]Für zentrale Systeme wie SVN, benötigt man ein so genanntes [I][URL="http://de.wikipedia.org/wiki/Repository"]Repository[/URL][/I]. Je nachdem welches System man verwendet, kann dies lokal angelegt sein oder aber online auf einem Server. Der Vorteil von Online-Repositories liegt natürlich in der Verfügbarkeit, auch wenn man an einem fremden Rechner arbeitet. Hat man keinen eigenen Server zur Verfügung, finden sich im Netz auch kostenlose Anbieter von Repositories. 
      [*]Optional bietet sich eine Software an, die (u.a.) den Entwicklungsverlauf veranschaulicht, wie z.B. [URL="http://trac.edgewall.org/"]trac[/URL] oder [URL="http://www.redmine.org/"]redmine[/URL]
      [*]Anbieter von Versionsverwaltungs-Hosting (z.B. bitbucket, github, usw.) haben in der Regel auch eine visuelle Darstellung des Entwicklungsverlaufs 
      [/LIST]
      Wie funktioniert also Versionsverwaltung prinzipiell? Es gibt zwei relevante Ansätze:
      
      [LIST]
      [*]zentrale Versionsverwaltung (z.B. [URL="http://de.wikipedia.org/wiki/Subversion_%28Software%29"]SVN[/URL]) 
      [*]dezentrale Versionsverwaltung (z.B. [URL="http://de.wikipedia.org/wiki/Git"]Git[/URL]) 
      [/LIST]
      Entscheidet man sich für ein zentrales System, gibt es also ein einziges Repository, eine Datenhalde, die jeden einzelnen Stand der darin enthaltenen Dateien speichert und auch nachträglich vergleichen und wiederherstellen kann.
      Handelt es sich bei den Dateien um Textdateien (also auch Quellcode-Dateien sämtlicher Programmiersprachen), dann kann die Versionsverwaltung Änderungen ineinander einpflegen ([I]mergen[/I]).
      Angenommen zwei Programmierer arbeiten an der gleichen Datei eines Repositorys. Wenn nun einer der Programmierer seine Arbeit abgeschlossen hat und seine Änderungen an das Repository übermitteln will ([I]commit[/I]), kann er das tun. Interessant wird es in dem Moment, wenn der zweite Programmierer die gleiche Datei übermittelt. Nun stellt das System fest, ob die Veränderungen kollidieren, also ob beide Programmierer an der gleichen Zeile des Codes Änderungen vorgenommen haben. Ist das der Fall, wird der Programmierer auf einen Konflikt hingewiesen, den er erst beheben muss, bevor er seine Version übermitteln kann. Er benutzt dazu die Update-Funktion seines Clients, um den letzten Stand der Datei vom Repository zu erhalten und in seine eigene Datei einpflegen zu lassen, soweit das möglich ist. Danach muss er nur noch die Stellen korrigieren, die Konflikte verursachten.
      An der Stelle sei angemerkt, dass es auch Versionsverwaltungssysteme gibt, die von vornherein die gleichzeitige Arbeit an der gleichen Datei verbieten. Wenn jemand eine Datei bearbeiten möchte, holt er sie sich vom Repository ([I]checkout[/I]), bzw. zumindest die Berechtigung nun als Einziger an dieser Datei arbeiten zu dürfen.
      
      [SIZE=3]P.S.: der hier genutzte Jargon entspricht eher SVN als Git.[/SIZE]
      [/spoiler]
 
Zuletzt bearbeitet: (einige Links geupdatet, Swift für Xcode erwähnt, Update für Game Engines/Frameworks, neben trac redmine erwähnt)
  • Gefällt mir
Reaktionen: ZeroStrat, °Sn0wFlow°, Fire8ird und 11 andere
AW: [FAQ] Programmieren für Anfänger

Changelog
chronologisch absteigend von neu nach alt

  • einige Links geupdatet, Swift bei Xcode erwähnt, Update für Game Engines/Frameworks, neben trac redmine erwähnt
  • Abschnitt über Mikrocontroller hinzugefügt. Danke Verata!
  • XNA als obsolet markiert und Verweis auf mögliche Alternative MonoGame
  • Rework des "Was könnte ich denn programmieren?"-Bereichs
  • Hinweis zur IDE "Xcode" für Mac hinzugefügt
  • Verlinkung entsprechender Paragraphen zum Thema Cyberkriminalität
  • Erklärung zum Unterschied zwischen Programmieren und Programmiersprachen verfasst mit Verweis auf SICP
  • Versionsverwaltung in eigenen Bereich ausgegliedert und erweitert
  • Erste Version veröffentlicht und kleine Fehlerteufel gejagt
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Ezeqiel, sethdiabolos, Oleminator und 3 andere
AW: [FAQ] Programmieren für Anfänger

Sehr schön und auch neutral ;)
Allerdings vermisse ich ein wenig den Punkt: ab und zu mal was automatisieren.
Dafür verwende ich persönlich einfach Autoit ;)
Top Community und viele Skripte schon fertig, müssen nur noch kurz angepasst werden.
Als Beispiel "Spiele" zu nennen ist, vermute ich, in den meisten Fällen einfach "too much".
 
AW: [FAQ] Programmieren für Anfänger

Ja das ist ein guter Punkt, die Automatisierung. Wo würdest du denn das einordnen? Bei "Anwendungsentwicklung"? Man könnte natürlich auch einen Extrabereich für "Anwendungsfälle/Projektideen für Anfänger" schaffen.

Spiele wurden zum einen so konkret aufgegriffen, weil die Frage ständig kommt, aber auch weil ich in der Richtung vorbelastet bin. :D
 
AW: [FAQ] Programmieren für Anfänger

Ich finde, daß Du etwas zu C lastig bist.

Im Punkt Anwendungsentwicklung wäre eine Differenzierung schöner:
Statt C / C++ / C# / Java (alles C nahe Sprachen bezüglich Syntax) wäre C++ / Java / Visual Basic / Pascal/Delphi schöner.

Managed code ist im Prinzip schon okay aber nur Java und C# hier aufzuführen ist etwas wenig, denn .NET geht mit vielen Sprachen, deswegen wäre der Verweis auf .Net besser. Danach wäre es sinnvoller, zu sagen, daß Du Java und C# den Vorzug gibst. So entsteht dr Eindruck, es gäbe nichts anderes.

Aber sonst... bin mal gespannt, was noch kommt.
 
AW: [FAQ] Programmieren für Anfänger

In Richtung .Net/Pascal/VB/Delphi offenbaren sich ganz klar meine Schwächen. Ehe ich da Halbwissen verbreite, hoffe ich eher auf einen Beitrag von kompetenteren Leuten. ;)
 
AW: [FAQ] Programmieren für Anfänger

Ich würde wohl als erstes einen Punkt machen: "Was will ich programmieren?"
Und dann halt:
-Spiele
-Websites
-Automatisieren
(-Bingo Bot für Skype :D)
...

und von dort dann weiterleiten zu infragekommenden Sprachen.
 
  • Gefällt mir
Reaktionen: Galdbadia
AW: [FAQ] Programmieren für Anfänger

ich hoffe du erweiterst das ganze noch ein bißchen.

z.b. noch ein kurzer Absatz darüber was Programmierung eigentlich ist oder etwas über Compilierung im allgemeinen ....
 
AW: [FAQ] Programmieren für Anfänger

Kostenlose Bücher? SICP! :D
 
AW: [FAQ] Programmieren für Anfänger

Guter Text!

Allerdings würde ich evtl noch die Unterschiede zw. imperativer, deklarativer und objektorientierter Programmiersprache erläutern.
Wie du aber schon geschrieben hast hat ja jede Sprache seine Vor- und Nachteile.

Wichtig ist aber auch ein gewisses Grundwissen in der Softwareentwicklung. z.B. Entity-Relationship-Modell, Datenflussdiagramme, UML
 
AW: [FAQ] Programmieren für Anfänger

Funktionale Programmierung gibt es da übrigens auch noch.
Außerdem sind das keine bspw "objektorientierte Programmiersprachen", sondern OOP ist ein Paradigma.
Manche Sprachen drängen einem das auf, aber man kann bspw. C++ auch komplett ohne OOP machen.
 
AW: [FAQ] Programmieren für Anfänger

tenja schrieb:
Allerdings vermisse ich ein wenig den Punkt: ab und zu mal was automatisieren.
Dafür verwende ich persönlich einfach Autoit ;)

Naja, wenn wir von Automatisierung im Themenbereich programmieren sprechen, dann wären Build-Systeme wie make, ant etc doch deutlich angebrachter.
 
AW: [FAQ] Programmieren für Anfänger

Eventuell könnte man noch Scala aufführen. Ist ja auch etwas funktionaler als die anderen und halt direkt für Mehrkernanwendungen optimiert. Dann könnte man z.B zum Programmieren nen Sortieralgorithmus implementieren der über divide an conquer arbeitet und das auf mehrere Threas verteilt.

Ist glaube ich auch ne schöne Aufgabe. So kann man dann auch doppelte Dateien finden und diese gegebenenfalls löschen ...
 
AW: [FAQ] Programmieren für Anfänger

Ich finde der Begriff "Hacker" ist nicht korrekt dargestellt, auch wenn die Erklärung wohl dem entspricht, was die Mehrheit dafür halten. Dennoch würde ich darauf hinweisen, was die eigentliche Wortbedeutung ist.
 
AW: [FAQ] Programmieren für Anfänger

Ich will niemandem auf die Füße treten, aber nach diesem umfangreichen Posting sollte eigentlich jeder Post in diesem Unterforum mit Verweis darauf geschlossen werden.
Jetzt liegt es nur noch an den Mods das umzusetzen (*Trommelwirbel*)...

EDIT:
Es wäre nett, wenn du das selbständige Arbeiten und Herausarbeiten/Finden von Informationen betonen könntest. (gidf usw.)
 
AW: [FAQ] Programmieren für Anfänger

Puuuh, bei dem Punkt zu den verschiedenen Paradigmen kam ich schon ganz schön ins Schwitzen. Das entfällt einem alles, wenn man nur noch praktisch arbeitet und die Theorie eine Weile zurück liegt. :D Wenn da jemand Korrekturen anzubieten hat, der noch voll im Saft des Studiums steht - immer her damit!

@derlolomat:
Ja, ich überlege schon die ganze Zeit, wie ich sowas verpacken soll. Sowas wie "Allgemeine Ratschläge" ist vielleicht sinnvoll.
 
Zuletzt bearbeitet:
AW: [FAQ] Programmieren für Anfänger

Ich würde das eher als "Grundlage" sehen und nicht als "Allgemeinen Ratschlag".
Selbst wenn es lediglich letzterer wäre, wäre das damit so schön formuliert, dass man es gleich ignorieren kann.

EDIT:
Bin übrigens (jetzt nicht mehr ganz so) heimlicher Fan deiner Signatur.
 
Zuletzt bearbeitet:
AW: [FAQ] Programmieren für Anfänger

Erst mal großes Lob für die Mühe
Hacker (bzw. Cracker) können sich einer Auswahl berüchtigter und im Netz verfügbarer Tools bedienen und sind damit nicht unbedingt gezwungen selbst Schadsoftware zu programmieren.
Diesen Satz finde ich aber, nunja nicht unbedingt treffend, den für viele Hacks reichen wohl selbst heute noch ein Einzeiler(Stichwort: SQL-Injection oder XSS ). :D
Dazu finde ich immer noch dieses Video von der 25C3 sehr passend :D
http://www.youtube.com/watch?v=AWavvHJQ_Pc

Achja, dazu noch der passende Paragraph aus dem StGB
http://bundesrecht.juris.de/stgb/__202c.html

EDIT:
Die anderen beiden vergessen^^
http://bundesrecht.juris.de/stgb/__202a.html
http://bundesrecht.juris.de/stgb/__202b.html
 
Zuletzt bearbeitet:
Ich habe den Versionsverwaltungsteil mal in einen eigenen Punkt ausgelagert und angefangen etwas mehr ins Detail zu gehen. Das steckt aber noch in den Kinderschuhen und ich habe selbst nie etwas anderes als SVN benutzt, kenne mich also mit Git leider noch gar nicht aus. Wenn sich in der Vorgehensweise bei Git etwas deutlich von meiner Beschreibung unterscheidet, dann wäre eine kurze Erklärung ganz hilfreich. ;)

@badday: Ja, bei der Unterscheidung habe ich mich nicht sonderlich ins Zeug gelegt, abgesehen von der Verlinkung zur Unterscheidung zwischen Hacker und Cracker. Wenn ich Zeit finde, lese ich mir das noch mal genauer an, um es auch richtig wiedergeben zu können. In erster Linie war die Absicht den Leuten zu erklären, dass zum Hacken/Cracken mehr gehört, als Programmieren zu lernen.

@asdfman: SICP ist nun ebenfalls erwähnt. Wenn du das noch ausgebaut sehen möchtest, dann lass mir einfach Content zukommen. ;)
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben