Die Leserumfrage hat ein ziemlich deutliches Ergebnis ergeben: eine Artikelserie zum Thema Programmieren ist erwünscht. Das freut mich natürlich, da in diesem Bereich meine hauptsächlichen Kompetenzen liegen. In den nächsten Wochen (und vermutlich Monaten) möchte ich mich hier im Blog also mit dem Thema Programmieren beschäftigen und eine Einführung in selbiges geben.

Da es, wie einige Leser natürlich zu Recht angemerkt haben, bereits genügend Bücher und Leitfäden zum Programmieren an sich gibt, möchte ich mich in dieser Artikelserie nicht allein auf das reine Programmieren beschränken, sondern immer wieder Exkurse in damit verwandte Themen machen, die aber in einer reinen Programmier-Anleitung so meist nicht behandelt werden. Wie immer gilt: besondere Themen-Wünsche einfach in den Kommentaren äußern. Ein Lesen der Artikelserien “Wie Rechner rechnen” und “Programmierung” ist sicherlich hilfreich, aber hoffentlich nicht nötig, um diese Artikelserie zu verstehen.

In diesem ersten Artikel soll es hauptsächlich um das ganze “Drumherum” beim Programmieren gehen, vor allem: welche Programmiersprache soll verwendet werden und was muss gemacht werden, um damit wirklich etwas auf dem Bildschirm zu sehen. So richtig programmiert wird diesmal noch nicht – Vorbereitung muss aber leider sein. Aber keine Angst, der nächste Artikel folgt bald.

Fangen wir mit der Wahl der Programmiersprache an. In der Informatik-Welt existieren mittlerweile tausende von Programmiersprachen, die für die unterschiedlichsten Zwecke entworfen wurden. Die Programmiersprachen lassen sich dabei nach den unterschiedlichsten Kriterien in Kategorien einteilen. Eine sehr grobe Einteilung ist dabei die Einordnung einer Sprache als sogenannte General Purpose Language (GPL) oder als Domain Specific Language (DSL). GPLs sind Sprachen, die ohne einen speziellen Anwendungszweck entworfen wurden und daher für alle möglichen Zwecke einsetzbar sind; demgegenüber sind DSLs “domänengebunden”, das heißt für die Anwendung in einem ganz bestimmten Anwendungsgebiet gedacht und daher in ihrer Funktionalität in der Regel sehr eingeschränkt. Zum Lernen des Programmierens eignen sich GPLs in der Regel besser, da mit ihnen viel mehr Konzepte umgesetzt werden können – wir wollen uns in dieser Artikelserie daher auch vorrangig mit GPLs beschäftigen.

Über die konkrete Wahl der Programmiersprache könnte man stundenlang philosophieren, da es unzählige Argumente gibt, die für oder gegen eine bestimmte Sprache sprechen. In dieser Artikelserie werde ich vorrangig die Sprache C++ verwenden, und zwar aus den folgenden Gründen:

  1. C++ ist eine Multi-Paradigmen-Sprache, das heißt, sie unterstützt mehrere Programmierparadigmen (was das ist, erkläre ich in einem späteren Artikel), wodurch mehrere Sachen in einer Sprache gezeigt werden können.
  2. Sie ist relativ maschinennah, wodurch auch technischere Details erklärt werden können.
  3. Entgegen häufig gelesener Behauptungen ist C++ größtenteils maschinenunabhängig; jeder kann sie auf seinem System nutzen.
  4. Egal, welche Sprache gewählt wird: es wird immer jemanden geben, der mit der Wahl unzufrieden ist. Daher wähle ich die Sprache aus, in der ich mich am besten auskenne und potentiell am wenigsten Unsinn schreibe.

Da nun die zu nutzende Programmiersprache geklärt ist, noch ein paar einführende Worte zur Entwicklungsumgebung. Mit Entwicklungsumgebung wird typischerweise die Menge an Programmen bezeichnet, die zur Entwicklung mit einer bestimmten Programmiersprache verwendet wird. Üblicherweise umfasst das einen Editor zum Schreiben des Programmtextes und einen Compiler – das Programm, das den geschriebenen Programmtext in z.B. in ein ausführbares Programm übersetzt. Sind Texteditor und Compiler in einem einzelnen Programm zusammengefasst, das dann auch noch weitere Funktionalität zur Entwicklung mit der Sprache bereitstellt, spricht man von einer integrierten Entwicklungsumgebung, kurz IDE. Ohne Entwicklungsumgebung ist natürlich kein Programmieren möglich!

Die Auswahl für C++ ist hier auf Grund der weiten Verbreitung der Sprache naturgemäß ziemlich groß. Im folgenden möchte ich einige Möglichkeiten vorstellen und kurz erläutern, wie man damit aus einer Quelltextdatei ein ausführbares Programm erzeugt – wer die Inhalte der Artikelserie ausprobieren möchte und noch keinen Compiler installiert hat, sollte sich für eine der folgenden Lösungen entscheiden. Wenn in zukünftigen Artikeln von kompilieren die Rede ist, dann ist damit gemeint, die im Folgenden beschriebenen Schritte zum Erstellen einer ausführbaren Datei durchzuführen. Die folgenden Beschreibungen erfolgen für Linux und Windows; für Mac OS kann ich mangels eines entsprechenden Rechners leider keine Anleitung geben (vielleicht kann einer meiner Leser mir eine kurze Anleitung für XCode und Clang oder GCC unter Mac OS zukommen lassen?)

1 / 2 / Auf einer Seite lesen

Kommentare (36)

  1. #1 Wolfgang
    April 3, 2013

    Bei Fedora installiert ein
    “yum install clang”
    den compiler.

  2. #2 Marcus Frenkel
    April 3, 2013

    Danke, ist aufgenommen.

  3. #3 CM
    April 3, 2013

    Toll! C++ ist meine aktuelle Gebrauchssprache Nr. 1 (daneben viel R & Python), da kann ich bestimmt was lernen – ich bin nämlich zu 80 % Autodidakt und gerade der neue Standard ist mir noch nicht sehr vertraut.

    Mich interessiert insb. auch – wenn ich so vermessen sein darf – welche (wissenschaftlichen) Bibliotheken so empfohlen werden im Laufe der Artikelserie und insb. in den Threads. boost kennt jeder, aber es gibt ja noch etwas mehr.

    Gruß,
    Christian

  4. #4 Dr. Webbaer
    April 3, 2013

    Warum wird denn “programmiert”?

  5. #5 CM
    April 3, 2013

    @webbae: a) Weil es Spaß macht. Und b) damit Sie solche Fragen in diesem Forum stellen können. Also: Wie ist die Frage gemeint? 😉

  6. #6 znEp
    April 3, 2013

    Bis auf eine Sache läuft das schon mal. ich musste bei mir die austauschen gegen die .
    Muss ich noch Libraries runterladen oder woran liegt das?
    (Ubuntu 12.04; gcc 4.6.3)

    Und weil es thematisch passt mach ich hier mal kurz Werung, nämlich für Fiona lernt Programmieren https://fionalerntprogrammieren.wordpress.com/ 🙂
    sie blogt seit einiger Zeit wie sie sich selber und mit Hilfe von Freunden Programmieren beibringt.

    Freu mich schon auf die nächsten Teile

  7. #7 znEp
    April 3, 2013

    Ups er hat wegen den spitzen Klammern ‘cstdio’ und ‘stdio.h’ verschluckt. Die beiden musste ich austauschen

  8. #8 Dr. Webbaer
    April 3, 2013

    @CM
    Das Programmieren bzw. das IT-gestützte Automatisieren von Prozessen oder Projekten dient dem allgemeinen sozialen Fortkommen.

    Wenn Sie bspw. Datendesign betreiben, dann tun Sie dies nicht ohne Grund, denn die Datenhaltung repräsentiert einen sozialen Status und insbesondere auch das Bemühen diesen dahingehend zu ändern, dass sogenannter Mehrwert entsteht.

    In der Wirtschaft wie auch im privaten Bemühen ist die Programmierarbeit mit Aufwand verbunden und dient in jedem Fall sozialen Zwecken,

    Diesbezüglich hätte sich der Schreiber dieser Zeilen bei diesem Thema einhergehende Reflektion versprochen und stände auch bereit, sozusagen plattform- und paradigmenübergreifend ein wenig zur Hand zu gehen…

    MFG
    Dr. W

  9. #9 Marcus Frenkel
    April 3, 2013

    @znEp
    ‘cstdio’ ist die C++-Entsprechung der ‘stdio.h’ von C. Sollte eigentlich alles immer dabei sein. Die Datei hat auch die Endung “cpp” und nicht nur “c”, ja? Und es wurde auch nicht als C-Code kompiliert?

    Schau doch bitte einmal im Ordner /usr/include/c++/4.6.3, ob sich dort die cstdio-Datei befindet.

  10. #10 znEp
    April 3, 2013

    Liegt daran das ich gcc statt g++ genommen habe m)
    mit nem -x c++ gehts dann ja auch 🙂

  11. #11 HF
    April 3, 2013

    Programmieren ist ein faszinierendes Hobby, aber vielleicht ist eine kleine Warnung angebracht:

    Gib einem Menschen ein Stück Software, und du frustrierst ihn für drei Tage.
    Lehre einen Menschen programmieren, und du frustrierst ihn für den Rest seines Lebens.

  12. #12 CM
    April 3, 2013

    @webbaer: Aha. Ehrlich gesagt, verstehe ich das Geschriebene nur ungefähr. Ich persönlich gönne mir jedenfalls das Bisschen wissenschaftlichen/programmiertechnischen Narzissmus, dass sich ab und an trotz des durchaus – @HF: BG – vorhandenen Frustes einstellt.

    Also, auf diese Frage mögen Andere antworten, die das besser können.

    Gruß,
    Christian

  13. #13 Doomtrain
    April 3, 2013

    Ach ja C++
    Hab ich nie wirklich gelernt, kann nur rudimentär die Syntax. Von daher find ich die Wahl schon sehr gut. Zudem ist es sowohl nostalgisch als auch modern. ^^

    Ich selbst scheib meinen Code normal in C# oder Perl (Python hab ich mir auch mal genauer angesehn). In speziellen Fällen auch in T-SQL (womit man natürlich keine Programme schreibt).

    Die meines erachtens größte Herausvorderung ist die Wahl der richtigen Biblioteken (man muss die ja erst mal kennen).

    Ich freu mich auf jeden Fall schon auf den nächsten Artikel.

  14. #14 DeLuRo
    April 3, 2013

    @HF #11: ‘…du frustrierst ihn für den Rest seines Lebens”

    Nöö, eigentlich nicht; das halte ich für eine Spruchanalogie, die unzulässig aus einer älteren Spruchversion umgewandelt wurde. Das Problem mag bei der Betrachtung von Programmierung als “faszinierendem Hobby” liegen.

    Wenn man Programmieren nur auf Hobbyniveau lernt, mag so etwas passieren können — das ist wie beim Handwerken, ob nun als Schreiner, Metallbauer oder Steinmetz. Man macht immer wieder Fehler und weiß nicht warum.

    Falls man aber “so richtig” Programmieren lernt, durch alle Paradigmen hindurch und mit informatischem Hintergrund, und dazu ausreichend Anwendungserfahrung sammelt (das ist mein Erleben des Themas), dann klappt es auch mit fast jeder Programmerstellung. Es kommt darauf an, die Verfahren und Tricks dahinter zu verstehen. Ein bisschen Talent dafür kann auch nicht schaden.

  15. #15 Stefan W.
    https://demystifikation.wordpress.com
    April 3, 2013

    Kann man auch Hirnchirurgie auf Hobbyniveau lernen?

    Mich wundert etwas, dass das Linken so aus der Mode gekommen ist. Früher musste man die Programme nicht nur kompilieren, sondern auch noch linken, um ein lauffähiges Programm zu bekommen. Dass die Werkzeuge nach dem Kompilieren das Linken automatisch anstoßen bedeutet ja nicht, dass es nicht stattfindet.

    Wenn man Forenfragen zu C/C++ liest, dann sind rund die Hälfte der Fehlermeldungen, die vorgestellt werden, Linkermeldungen, und obwohl es explizit dabeisteht, und für die Lösung des Problems eklatant wichtig, wird es als “Kompilerfehler” bezeichnet.

  16. #16 Marcus Frenkel
    April 4, 2013

    @Stefan W.
    Daran ist wohl der gcc ein wenig Schuld, würde ich sagen. Der versteckt das Linken so ein wenig hinter dem gleichen Aufruf, der zum Compilieren stattfindet und macht ihn nicht mehr explizit. Im Visual Studio sieht das ein klein wenig anders aus: hier sind in den Einstellungen Compiler und Linker klar voneinander getrennt, und Linker-Fehler machen sich außerdem dadurch bemerkbar, dass man sie nicht doppelt anklicken kann, um zu der Fehlerstelle zu springen.

  17. #17 Marcus
    Mannheim
    April 4, 2013

    @ Dr. Webbaer #8
    Also ich wollte sagen, dass etwa zu dieser Zeit die Verwirrung durch die ähm … und die Verwirrung wird all jene verwirren, die nicht wissen; niemand wird wirklich genau wissen, wo diese kleinen Dinge zu finden sind, die verknüpft sind mit einer Art von Handarbeitszeug, das durch die Verknüpfung verknüpft ist; und die Jungen sollen nicht wissen, wo die Dinge die jene Väter erst um 8 Uhr am vorhergehenden Abend dorthin gelegt hatten, kurz vor Glockenschlag.

  18. #18 Dr. Webbaer
    April 4, 2013

    @CM

    Ich persönlich gönne mir jedenfalls das Bisschen wissenschaftlichen/programmiertechnischen Narzissmus (…)

    Das wäre dann aber kein Programmieren, sondern Frickeln.

    SCNR
    Dr. W

  19. #19 CM
    April 4, 2013

    😉

  20. #20 Anwalts_Liebling
    https://freischissblog.wordpress.com/
    April 4, 2013

    Lieber Herr Webbär, auch ich gehöre zu der grossen Schar von Programmierern (COBOL, ABAP, JCL unter MVS). Ich darf glaubhaft versichern, das dies weder 1987 meine Mitmenschen beeindruckt hat, noch 2013 jemanden interessiert. Einziger Makel, den ich aber gern auf mich nehme: der neidische Blick auf das Gehalt. Und selbst da bin ich ehrlich: Falsche buchungen meiner Programme kann ich reparierern. Falsche Spritzen meiner Frau (Krankenschwester) lassen sich eher nicht korrigieren….insofern würde ich sagen, das meine Frau unterbezahlt ist,,, aber das ist ein anderes Thema.

    OT: mit C++ komme ich als Assembler-Entwickler gut zurecht – also: ich bin gespannt!

  21. #21 Dr. Webbaer
    April 4, 2013

    @Anwalts_Liebling

    auch ich gehöre zu der grossen Schar von Programmierern (COBOL, ABAP, JCL unter MVS). Ich darf glaubhaft versichern, das dies weder 1987 meine Mitmenschen beeindruckt hat, noch 2013 jemanden interessiert.

    Ihr Kommentatorenfreund, der Webbaer, ist jetzt zum Beispiel beeindruckt: ein COBOL-Programmierer!, die gibt’s nicht mehr so-oft. Eine schreckliche Sprache, aber sie hat den Job getan. – Allerdings geht es hier nicht darum zu beeindrucken, sondern zu erklären. Hatten Sie nie das Bedürfnis genau zu verstehen und erklären zu können, warum programmiert wird?

    MFG
    Dr. W (der für den Einstieg ins Programmieren ebenfalls Visual Studio Express nahelegt)

  22. #22 Scr
    April 4, 2013

    Unter Arch-Linux kann man clang mit “pacman -S clang” installieren. (Auch wenn Arch-Linux Benutzer das vermutlich nach der Installation auch so wissen.)

    • #23 Marcus Frenkel
      April 4, 2013

      Das würde ich auch sagen. 😉

  23. #24 Anwalts_Liebling
    https://freischissblog.wordpress.com/
    April 4, 2013

    Tja Hr. Webbär, warum programmiert wird? Weils Spass macht? Weil es mein Broterwerb ist? Weil mich Technik fasziniert? Weil es mir einfach “liegt”? – Tausend Gründe – ach ja – der wichtigste, weil mein Arbeitgeber das auch gerne wollte und dafür sogar die Umschulung finanzierte, da ich auf der “Schule” sogar noch RPG (Report-Generator) und BS2000 gelernt habe (unter Roscoe, wers noch kennt)… und was eine Pet-Maestro von Siemens ist… kucken… Datenbanken? Netzwerkdatenbank war angesagt 🙂

  24. #25 Dr. Webbaer
    April 4, 2013

    @Anwalts_Liebling
    Wenn Sie verstehen warum programmiert wird, ist es leichter zu verstehen wie programmiert wird.

    MFG
    Dr. W (der auch einige Zeit bei den IT-nahen Horsten beratend unterwegs war, die Probleme mit der Marktwirtschaft haben, diejenigen, die sich heute auch gerne PIRATEN nennen ohne es wirklich zu sein)

  25. #26 Sabine
    April 4, 2013

    Hallo,
    ich trau mich mal und frage einfach: Wie lege ich die Datei an sich an? So, dass ich dann etwas hineinschreiben kann?

  26. #27 znEp
    April 4, 2013

    @Sabine
    Kommt aufs Betriebssytem an. Unter Linux nutz ich für kleinere Sachen nano(einfach mit sudo nano dateiname.erweiterung).
    Unter Windows bin ich mit dem Notepad++ immer gut gefahren.

  27. #28 Marcus Frenkel
    April 4, 2013

    @Sabine
    Wie znEp schon sagte: unter Linux tut es ein “nano dateiname.cpp” im passenden Verzeichnis oder auch “touch dateiname.cpp” und dann ein Öffnen im bevorzugten Editor. Unter Windows kommt es drauf an: wenn eine IDE wie das Visual Studio benutzt wird, dann einfach an die Anleitung halten, da wird die Datei automatisch angelegt. Ansonsten im Windows Explorer Rechtsklick -> Neu -> Textdokument, und dann einen Namen vergeben.

  28. #29 rolak
    April 4, 2013

    Solche Fragen sind wichtig, Sabine. Wenn mir nicht bei verschiedensten Menschen im Zuge irgendwelcher ‘Wie geht das?’-Erklärungen gemerkt hätte, wie ungemein grundlegend selbst bei täglich mit Computern Umgehenden teilweise angefangen werden muß, würde ich immer noch Fachchinesisch predigen… Angeblich klappt meine Interpretation der Schreck- und Abwehrmimik schon ganz gut 😉

  29. #30 rolak
    April 4, 2013

    mir .. gemerkt hätte

    Weia^^ Bitte nach Belieben mit den passenden Teilen von “ich .. aufgefallen wäre” austauschen. Danke.

  30. #31 Sabine
    April 4, 2013

    @ znEp und rolak
    Vielen Dank für Tip und Zuspuch! Jetzt (keine 3 Stunden später: Datei erstellt unter Ubuntu 11.10 (mit nano) und kompiliert wie angegeben – also: Programm geschrieben. Jedenfalls behauptet der Dateimanager, es gäbe da ein ausführbares Programm. Es gibt auch einen hübschen Button. Es passiert nur nichts, wenn ich drauf klicke… Aber wenn meine Fortschritte in diesem Tempo weitergehen, dann wird es spätestens morgen? übermorgen? Es gibt Hoffnung! :o)

  31. #32 Marcus Frenkel
    April 4, 2013

    @Sabine
    Draufklicken hilft bei einer Konsolen-Applikation nichts. 😉
    Die muss aus der Shell heraus mit “./test” gestartet werden, damit man etwas sieht.

  32. #33 Sabine
    April 4, 2013

    Juchhuuuu!!!

  33. #34 rolak
    April 4, 2013

    btw: Bei ‘shell’ habe ich automagisch immer zwei Gesichter vor Augen: Tony und Ping. Der ja auch iwie zum Computer paßt…

  34. #35 Anwalts_Liebling
    April 5, 2013

    @WerbeBär: Das verstehe ich nicht… für mich ist Programmieren Talent. Man hats oder man hats nicht. Wer’s nicht hat wird auch nie kapieren. Ich habe auch kein Talent zum Zeichnen – also lasse ich die Finge davon.
    Anwalts_Liebling (der mit allwissenden externen Beratern auch heute noch Probleme hat, denn er hasst Menschen, die wie bestimmte Fliegen überall abkupfern und das woanders als eigene Leistung ausgeben)

  35. #36 Dr. Webbaer
    April 5, 2013

    @Anwalts_Liebling
    Üblicherweise dient Software bzw. deren Entwicklung dem Wirtschaftsbetrieb, insofern gilt statt ‘Das verstehe ich nicht… für mich ist Programmieren Talent.’:
    Programmieren unterstützt den Betrieb.

    Das Talent dürfte darin bestehen das Geschäftsmodell zu verstehen und einem DBS so zuzuführen, dass bestehende Prozesse unterstützt werden und noch kommende bereits im Datenmodell/Geschäftsmodell angelegt sind. Dabei ist es wichtig die Entitäten bestmöglich zu identifizieren, übrigens nicht nur diejenigen, die direkt das Geschäftsmodell betreffen.

    Das ist einerseits nicht ganz einfach und andererseits ist das vielen nicht bekannt. Wäre es bekannt, hätten viele, die im Bereich der Softwareentwicklung herumspringen, mehr Geld in der Tasche und ein positiveres Verhältnis zur Marktwirtschaft.

    MFG
    Dr. W (der sich mit seiner Beratungsleistung natürlich bei denjenigen, die bevorzugt frickeln oder mit Algorithmen sozusagen spielen wollen, nicht unbedingt beliebt macht, loge)

    PS: Sie können vielleicht mal kurz skizzieren, was Sie eigentlich machen.