Erfreu Dich an Millionen von E-Books, Hörbüchern, Magazinen und mehr

Nur $11.99/Monat nach der Testversion. Jederzeit kündbar.

Sieben Wochen, sieben Sprachen (Prags)

Sieben Wochen, sieben Sprachen (Prags)

Vorschau lesen

Sieben Wochen, sieben Sprachen (Prags)

Länge:
802 Seiten
5 Stunden
Herausgeber:
Freigegeben:
23. Mai 2012
ISBN:
9783868994681
Format:
Buch

Beschreibung

Mit diesen sieben Sprachen erkunden Sie die wichtigsten Programmiermodelle unserer Zeit. Lernen Sie die dynamische Typisierung kennen, die Ruby, Python und Perl so flexibel und verlockend macht. Lernen Sie das Prototyp-System verstehen, das das Herzstück von JavaScript bildet. Erfahren Sie, wie das Pattern Matching in Prolog die Entwicklung von Scala und Erlang beeinflusst hat. Entdecken Sie, wie sich die rein funktionale Programmierung in Haskell von der Lisp-Sprachfamilie, inklusive Clojure, unterscheidet.
Erkunden Sie die parallelen Techniken, die das Rückgrat der nächsten Generation von Internet-Anwendungen bilden werden. Finden Sie heraus, wie man Erlangs "Lass es abstürzen"-Philosophie zum Aufbau fehlertoleranter Systeme nutzt. Lernen Sie das Aktor-Modell kennen, das das parallele Design bei Io und Scala bestimmt. Entdecken Sie, wie Clojure die Versionierung nutzt, um einige der schwierigsten Probleme der Nebenläufigkeit zu lösen.
Hier finden Sie alles in einem Buch. Nutzen Sie die Konzepte einer Sprache, um kreative Lösungen in einer anderen Programmiersprache zu finden - oder entdecken Sie einfach eine Sprache, die Sie bisher nicht kannten. Man kann nie wissen - vielleicht wird sie sogar eines ihrer neuen Lieblingswerkzeuge.
Herausgeber:
Freigegeben:
23. Mai 2012
ISBN:
9783868994681
Format:
Buch

Über den Autor


Ähnlich wie Sieben Wochen, sieben Sprachen (Prags)

Ähnliche Bücher

Ähnliche Artikel

Buchvorschau

Sieben Wochen, sieben Sprachen (Prags) - Bruce A. Tate

Sieben Wochen, sieben Sprachen: Verstehen Sie die modernen Sprachkonzepte

Bruce A. Tate

Copyright © 2011 O’Reilly Verlag GmbH & Co. KG

Die Informationen in diesem Buch wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen werden. Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.

Alle Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt und sind möglicherweise eingetragene Warenzeichen. Der Verlag richtet sich im Wesentlichen nach den Schreibweisen der Hersteller. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Kommentare und Fragen können Sie gerne an uns richten:

Copyright der deutschen Ausgabe:

1. Auflage 2011

Die Originalausgabe erschien 2010 unter dem Titel

Seven Languages in Seven Weeks bei Pragmatic Bookshelf, Inc.

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der

Deutschen Nationalbibliografie; detaillierte bibliografische Daten

sind im Internet über http://dnb.d-nb.de abrufbar.

Übersetzung und deutsche Bearbeitung: Peter Klicman

Lektorat: Volker Bombien, Köln

Fachliche Unterstützung: Sven Riedel, München

Korrektorat: Eicke Nitz, Köln

Satz: Andreas Franke, SatzWERK, Siegen; www.satz-werk.com

Produktion: Karin Driesen, Köln

Belichtung, Druck und buchbinderische Verarbeitung:

Druckerei Kösel, Krugzell; www.koeselbuch.de

Dieses Buch ist auf 100% chlorfrei gebleichtem Papier gedruckt.

O’Reilly Verlag Balthasarstr. 81 50670 Köln kommentar@oreilly.de


Inhalt

Vorwort

1. Einführung

1.1 Wahnsinn mit Methode

1.2 Die Sprachen

1.3 Kaufen Sie dieses Buch

Lernen Sie zu lernen

Hilfe in schwierigen Zeiten

1.4 Kaufen Sie dieses Buch nicht

Ich gehe über die Syntax hinaus

Ich helfe nicht bei der Installation

Ich bin keine Programmierreferenz

Ich werde Sie hart rannehmen

1.5 Ein letzter Punkt

2. Ruby

2.1 Ein wenig Geschichte

Interview mit Yukihiro (Matz) Matsumoto

2.2 Tag 1: Ein Kindermädchen finden

Schnelleinstieg

Ruby über die Konsole nutzen

Das Programmiermodell

Entscheidungen

Duck-Typing

Was wir am ersten Tag gelernt haben

Tag 1: Selbststudium

2.3 Tag 2: Vom Himmel herab

Funktionen definieren

Arrays

Hashes

Codeblöcke und yield

Ruby aus einer Datei ausführen

Klassen definieren

Ein Mixin schreiben

Module, Enumerable und Sets

Was wir am zweiten Tag gelernt haben

Tag 2: Selbststudium

2.4 Tag 3: Tiefgreifende Veränderung

Offene Klassen

Verwendung von method_missing

Module

Was wir am dritten Tag gelernt haben

Tag 3: Selbststudium

2.5 Ruby zusammengefasst

Stärken

Scripting

Webentwicklung

Produkteinführungszeit (Time to Market)

Schwächen

Performance

Nebenläufigkeit und OOP

Typsicherheit

Abschließende Gedanken

3. Io

3.1 Einführung in Io

3.2 Tag 1: Blaumachen und rumhängen

Aufwärmen

Objekte, Prototypen und Vererbung

Methoden

Listen und Maps

true, false, nil und Singletons

Ein Interview mit Steve Dekorte

Was wir am ersten Tag gelernt haben

Tag 1: Selbststudium

3.3 Tag 2: Der Würstchenkönig

Bedingungen und Schleifen

Operatoren

Nachrichten

Reflexion

Was wir am zweiten Tag gelernt haben

Tag 2: Selbststudium

3.4 Tag 3: Die Parade und andere sonderbare Orte

Domänenspezifische Sprachen

Ios method_missing

Nebenläufigkeit

Koroutinen

Aktoren

Futures

Was Sie am dritten Tag gelernt haben

Tag 3: Selbststudium

3.5 Io zusammengefasst

Stärken

Footprint

Einfachheit

Flexibilität

Nebenläufigkeit

Schwächen

Syntax

Community

Performance

Abschließende Gedanken

4. Prolog

4.1 Über Prolog

4.2 Tag 1: Ein ausgezeichneter Fahrer

Grundlegende Fakten

Grundlegende Folgerungen und Variablen

Die Lücken füllen

Karten einfärben

Wo ist das Programm?

Unifizierung, Teil 1

Prolog in der Praxis

Ein Interview mit Brian Tarbox, Delfinforscher

Was wir am ersten Tag gelernt haben

Tag 1: Selbststudium

4.3 Tag 2: Fünfzehn Minuten für Wapner

Rekursion

Listen und Tupel

Unifizierung, Teil 2

Listen und Mathematik

Regeln in beiden Richtungen verwenden

Was wir am zweiten Tag gelernt haben

Tag 2: Selbststudium

4.4 Tag 3: Die Bank sprengen

Sudokus lösen

Acht Damen

Was wir an Tag 3 gelernt haben

Tag 3: Selbststudium

4.5 Prolog zusammengefasst

Stärken

Natürliche Sprachverarbeitung

Spiele

Semantisches Web

Künstliche Intelligenz

Planung

Schwächen

Nützlichkeit

Sehr große Datenmengen

Mischen imperativer und deklarativer Modelle

Abschließende Gedanken

5. Scala

5.1 Über Scala

Affinität zu Java ...

Ohne sklavische Hingabe

Ein Interview mit Scalas Schöpfer Martin Odersky

Funktionale Programmierung und Nebenläufigkeit

5.2 Tag 1: Die Burg auf der Anhöhe

Scala-Typen

Ausdrücke und Bedingungen

Schleifen

whileLoop

forLoop

rubyStyleForLoop

Bereiche (Ranges) und Tupel

Klassen in Scala

Hilfskonstruktoren

Klassen erweitern

Companion-Objekte und Klassenmethoden

Vererbung

Traits

Was wir am ersten Tag gelernt haben

Tag 1: Selbststudium

5.3 Tag 2: Gesträuch beschneiden und andere neue Tricks

var versus val

Collections

Listen

Sets

Maps

Alles und Nichts

Collections und Funktionen

foreach

Weitere Listenmethoden

count, map, filter und mehr

foldLeft

Was wir am zweiten Tag gelernt haben

Tag 2: Selbststudium

5.4 Tag 3: Sich durch die Fusseln schneiden

XML

Mustererkennung

Guards

Reguläre Ausrücke

XML mit Matching

Nebenläufigkeit

Nebenläufigkeit in Aktion

Was wir an Tag 3 gelernt haben

Tag 3: Selbststudium

5.5 Scala zusammengefasst

Kernstärken

Nebenläufigkeit

Evolution des Java-Erbes

Domänenspezifische Sprachen

XML

Brückenbildung

Schwächen

Statische Typisierung

Syntax

Veränderlichkeit

Abschließende Gedanken

6. Erlang

6.1 Einführung in Erlang

Entwickelt für Nebenläufigkeit

Kein Threading

Leichtgewichtige Prozesse

Zuverlässigkeit

Interview mit Dr. Joe Armstrong

6.2 Tag 1: Menschlich erscheinen

Erste Schritte

Kommentare, Variablen und Ausdrücke

Atome, Listen und Tupel

Mustererkennung

Bit-Matching

Funktionen

Was wir an Tag 1 gelernt haben

Tag 1: Selbststudium

6.3 Tag 2: Die Form ändern

Kontrollstrukturen

Case

If

Anonyme Funktionen

Listen und Funktionen höherer Ordnung

Funktionen auf Listen anwenden

foldl

Fortgeschrittene Listenkonzepte

Konstruktion von Listen

Listenkomprehension

Was wir an Tag 2 gelernt haben

Tag 2: Selbststudium

6.4 Tag 3: Die rote Pille

Grundlegende Primitive zur Nebenläufigkeit

Eine einfache Empfangsschleife

Einen Prozess starten

Nachrichten senden

Synchrone Nachrichten

Synchron empfangen

Synchrones Senden

Prozesse der Zuverlässigkeit halber verknüpfen

Einen verknüpften Prozess starten

Vom Leichenbeschauer zum Doktor

Was wir an Tag 3 gelernt haben

Tag 3: Selbststudium

6.5 Erlang zusammengefasst

Kernstärken

Dynamisch und zuverlässig

Leichtgewichtige, nichts teilende Prozesse

OTP, die Enterprise-Bibliotheken

Lass es abstürzen

Kernschwächen

Syntax

Integration

Abschließende Gedanken

7. Clojure

7.1 Einführung in Clojure

Alles Lisp

Auf der JVM

Modernisiert für eine parallele Welt

7.2 Tag 1: Luke trainieren

Grundlegende Funktionsaufrufe

Strings und Chars

Boolesche Werte und Ausdrücke

Listen, Maps, Sets und Vektoren

Listen

Vektoren

Sets

Maps

Funktionen definieren

Bindungen

Anonyme Funktionen

apply

filter

Interview mit Rich Hickey, Schöpfer von Clojure

Was wir am ersten Tag gelernt haben

Tag 1: Selbststudium

7.3 Tag 2: Yoda und die Macht

Rekursion mit loop und recur

Sequenzen

Tests

Eine Sequenz verändern

Lazy Evaluation

Endliche Sequenzen mit range

Unendliche Sequenzen und take

defrecord und protocol

Makros

Was wir an Tag 2 gelernt haben

Tag 2: Selbststudium

7.4 Tag 3: Ein Auge für Böses

Referenzen und Transactional Memory

Referenzen

Mit Atomen arbeiten

Einen Atom-Cache entwickeln

Mit Agenten arbeiten

Futures

Was wir weggelassen haben

Metadaten

Java-Integration

Multimethoden

Threadzustand

Was wir an Tag 3 gelernt haben

Tag 3: Selbststudium

7.5 Clojure zusammengefasst

Das Lisp-Paradox

Kernstärken

Ein gutes Lisp

Nebenläufigkeit

Java-Integration

Lazy Evaluation

Daten als Code

Kernschwächen

Präfixnotation

Lesbarkeit

Lernkurve

Beschränktes Lisp

Zugänglichkeit

Abschließende Gedanken

8. Haskell

8.1 Einführung in Haskell

8.2 Tag 1: Logisch

Ausdrücke und primitive Typen

Zahlen

Character-Daten

Boolesche Werte

Funktionen

Einfache Funktionen definieren

Rekursion

Tupel und Listen

Programmieren mit Tupeln

Tupel und Komposition

Listen durchgehen

Listen generieren

Rekursion

Ranges und Composition

Listenkomprehension

Ein Interview mit Philip Wadler

Was wir an Tag 1 gelernt haben

Tag 1: Selbststudium

8.3 Tag 2: Spocks große Stärke

Funktionen höherer Ordnung

Anonyme Funktionen

map und where

filter, foldl, foldr

Partiell angewandte Funktionen und Currying

Lazy Evaluation

Ein Interview mit Simon Peyton-Jones

Was wir an Tag 2 gelernt haben

Tag 2: Selbststudium

8.4 Tag 3: Gedankenverschmelzung

Klassen und Typen

Grundlegende Typen

Benutzerdefinierte Typen

Funktionen und Polymorphismus

Rekursive Typen

Klassen

Monaden

Das Problem: Der betrunkene Pirat

Komponenten einer Monade

Eine Monade von Grund auf entwickeln

Monaden und do-Notation

Verschiedene rechnerische Strategien

Maybe-Monade

Was wir an Tag 3 gelernt haben

Tag 3: Selbststudium

8.5 Haskell zusammengefasst

Kernstärken

Typsystem

Ausdrucksfähigkeit

Reinheit des Programmiermodells

„Lazy" Semantik

Akademische Unterstützung

Kernschwächen

Unflexibles Programmiermodell

Community

Lernkurve

Abschließende Gedanken

9. Zusammenfassung

9.1 Programmiermodelle

Objektorientiert (Ruby, Scala)

Prototyp-Programmierung (Io)

Logikprogrammierung (Prolog)

Funktionale Programmierung (Scala, Erlang, Clojure, Haskell)

Paradigmen wechseln

9.2 Nebenläufigkeit

Kontrolle veränderlicher Zustände

Aktoren bei Io, Erlang und Scala

Futures

Transactional Memory

9.3 Programmierkonstrukte

Listenkomprehensionen

Monaden

Matching

Unifizierung

9.4 Ihre Sprache finden

A. Bibliografie

Stichwortverzeichnis

Widmung

Die fünf Monate vom Dezember 2009 bis zum April 2010 waren mit die schwierigsten meines Lebens. Mein Bruder, nicht einmal 47, bekam in einer Notoperation einen Bypass. Niemand ahnte überhaupt, dass etwas nicht in Ordnung sein könnte. (Die Operation verlief ohne Komplikationen und es geht ihm gut.) Ende März wurde bei meiner Schwester Brustkrebs diagnostiziert, bei meiner Mutter Krebs im Endstadium. Nur wenige Wochen später verstarb sie.

Sie werden erwarten, dass ich mit dem Schmerz eines unerwarteten Verlustes durch eine auf brutale Weise effiziente Krankeit kämpfe. Doch seltsamerweise war diese Erfahrung nicht nur negativ. Wissen Sie, meine Mutter war mit ihrem bemerkenswerten Leben, das sie lebte, im Reinen. Die Beziehung zur Familie war stark und erfüllend, und sie war mit ihrem Glauben genau da, wo sie sein wollte.

Lynda Lyle Tate legte ihre gesamte kreative Energie in das Malen von Aquarellen. Ihre Kunst teilte sie hauptsächlich über ihre Kunstgallerie in der Madison Avenue und über ihren Unterricht. Bevor ich von zu Hause weg ging, hatte ich die Gelegenheit, von ihr einige Lektionen zu lernen. Für jemanden mit einem technischen Beruf war diese Erfahrung immer ein wenig verwirrend. Ich konnte das Meisterstück auf meiner weißen Leinwand erkennen. Während mein Bild langsam Formen annahm, entfernte ich mich immer weiter von meiner ursprünglichen Vision. Wenn ich daran verzweifelte, dass es nicht in meiner Macht läge, diese Dinge zu korrigieren, sah mir meine Mutter über die Schulter und erzählte mir, was sie sah. Nachdem ihre talentierten Hände hier ein Schwarz hinzugefügt hatten, um die Tiefe zu betonen, und dort ein wenig ein Weiß, um Klarheit und Details zu schaffen, erkannte ich, dass ich gar nicht so weit vom Weg abgekommen war. Es bedurfte nur des richtigen Anstoßes, um mich vor dem Abgrund zu bewahren. Dann riss ich meine Arme im Triumph in die Höhe und erzählte jedem in meiner Klasse, was ich da geschaffen hatte, ohne zu erkennen, dass jeder seinen eigenen Freuden durchlebte.

Nach einer Weile erkannte ich, dass Mutter noch an einem anderen Bildnis arbeitete. Durch ihren Glauben und ihren Beruf fand sie gebrochene Menschen. Sie entdeckte eine verlorene Ehefrau hier und eine zerrüttete Ehe dort, brachte sie in den Unterricht und nutzte Farbe und Papier, um eine Tür zu öffnen, die zugeschlagen worden war. Während wir die letzten Wochen miteinander verbrachten, besuchten sie immer wieder Menschen, die bei dem Gedanken, ihren Lehrer zu verlieren, am Boden zerstört waren. Doch Mutter machte immer den passenden Witz oder fand die richtigen Worte, um diejenigen zu trösten, die zu ihrem Trost gekommen waren. Ich lernte die menschlichen Bildnisse kennen, die die Meisterin auf den rechten Weg gebracht hatte und die nun Großes leisten würden. Es war eine demutsvolle Erfahrung.

Als ich meiner Mutter sagte, dass ich ihr dieses Buch widmen würde, sagte sie mir, dass ihr das gefallen würde, dass sie aber nichts mit Computern zu tun hätte. Das ist allerdings wahr. Allein der Gedanke an „Fenster" machte sie ratlos. Doch sie hatte genug mit mir zu tun. Die wohl bedachten unterstützenden Worte inspirierten mich, ihre Liebe zur Kreativität formten mich, und ihr Enthusiasmus und Lebensfreude leiten mich selbst heute noch. Während ich über diese Erfahrungen nachdenke, fühle ich mich tatsächlich ein wenig besser und stärker, da auch ich ein von der Meisterin geschaffenes Bildnis bin.

Dieses Buch ist Lynda Lyle Tate (1936–2010) gewidmet.

Danksagung

Dies war das anspruchsvollste Buch, das ich jemals geschrieben habe. Es war gleichzeitig aber auch das lohnendste. Dafür haben die Menschen gesorgt, die mir auf unterschiedliche Weise Hilfe angeboten haben. Zuallererst möchte ich meiner Familie danken. Kayla und Julia, euer Schreiben beeindruckt mich. Ihr könnt euch noch nicht vorstellen, was ihr erreichen könnt. Maggie, du bist meine Freude und Inspiration.

In der Ruby-Community geht mein Dank an Dave Thomas, der mich zu dieser Sprache brachte, die meine Karriere auf den Kopf gestellt und mir den Spaß wiedergegeben hat. Dank auch an Matz für seine Freundschaft und die Möglichkeit, seine Gedanken mit den Lesern zu teilen. Er lud mich nach Japan an den Ort ein, an dem Ruby geboren wurde, und diese Erfahrung hat mich weit mehr inspiriert, als man sich vorstellen kann. Dank an Charles Nutter, Evan Phoenix und Tim Bray für die Unterhaltungen zu Themen in diesem Buch, die einem langweilig vorkommen mussten, mir aber dabei halfen, die Botschaft zu formen und zu verfeinern.

In der Io-Community geht mein Dank an Jeremy Tregunna, der mir beim Einstieg half und einige coole Beispiele für das Buch mit mir teilte. Seine Rezensionen waren mit die besten. Sie kamen frühzeitig und sorgten für ein wesentlich besseres Kapitel. Steve Dekorte hat etwas Besonderes geschaffen, ganz egal, ob der Markt das jemals erkennt. Die Features zur Nebenläufigkeit sind großartig und die Sprache besitzt eine innere Schönheit. Ich kann nur bestätigen, dass sich der Großteil der Spache gut anfühlt. Der Neuling dankt für die Hilfe beim Debugging der Installation. Dank auch für die aufmerksamen Rezensionen und das Interview, das mir dabei half, den Kern von Io zu erfassen. Er hat die Phantasie der Beta-Leser angeregt und die Lieblingssprache vieler dieser Leser geschaffen.

In der Prolog-Community geht mein Dank an Brian Tarbox, der seine bemerkenswerten Erfahrungen mit den Lesern geteilt hat. Die Delphin-Projekte haben dem Prolog-Kapitel sicher etwas zusätzliche Dramatik verliehen. Meinen besonderen Dank an Joe Armstrong. Er wird sehen, wie sehr sein Feedback dieses Kapitel und das ganze Buch geprägt hat. Dank auch für das Beisteuern des Landkarte-einfärben-Beispiels und den Ideen zu Append. Das waren die richtigen Beispiele zur rechten Zeit.

In der Scala-Community geht mein Dank an meinen guten Freund Venkat Subramaniam. Sein Scala-Buch ist sowohl umfassend als auch verständlich. Ich habe viel daraus gelernt. Auch die Rezensionen und die kleinen Hilfestellungen waren sehr willkommen. Diese kleinen Hilfen ersparten mir viel Leid und erlaubten es mir, mich auf das Lehren zu konzentrieren. Dank auch an Martin Odersky, der einem Fremden half, indem er seine Gedanken mit den Lesern teilte. Scala verfolgt einen einmaligen und mutigen Ansatz, funktionale mit objektorientierten Ansätzen zu verbinden. Diese Bemühungen sind sehr willkommen.

In der Erlang-Community möchte ich erneut Joe Armstrong danken. Seine Freundlichkeit und Energie halfen mir dabei, die Ideen in diesem Buch zu formen. Seine unermüdliche Werbung für die Art und Weise, wie verteilte, fehlertolerante Systeme aufgebaut sein sollten, hat funktioniert. Mehr als jede andere Idee aller anderen Sprachen in diesem Buch ergibt Erlangs „Lass es abstürzen"-Philosophie einen Sinn für mich. Ich hoffe, dass diese Ideen eine weitere Verbreitung finden.

In der Clojure-Community gilt mein Dank Stuart Halloway für die Rezensionen und Ideen, die mich dazu zwangen härter zu arbeiten, um den Lesern ein besseres Buch liefern zu können. Seine Einsichten in Clojure und sein Instinkt halfen mir die wichtigen Dinge zu verstehen. Sein Buch hatte einen großen Einfluss auf das Clojure-Kapitel und hat tatsächlich dazu geführt, dass ich einige Probleme in anderen Kapiteln anders angegangen bin. Sein Consulting-Ansatz ist sehr willkommen. Er bringt die so sehr benötigte Einfachheit und Produktivität in diesen Wirtschaftszweig. Dank auch an Rich Hickey für die wohlüberlegten Ideen zur Entwicklung der Sprache und was es bedeutet, ein Lisp-Dialekt zu sein. Einige Ideen in Clojure sind recht radikal und doch so praktisch. Glückwunsch. Er hat einen Weg gefunden, Lisp zu etwas Revolutionärem zu machen. Wieder einmal.

In der Haskell-Community geht mein Dank an Phillip Wadler. Er verschaffte mir einen Einblick in den Prozess, mit dem Haskell geschaffen wurde. Wir teilen die Leidenschaft für das Lehren, und er ist sehr gut darin. Dank auch an Simon Peyton-Jones. Ich habe das Interview sehr genossen, die neuen Einsichten und die für den Leser einmalige Perspektive.

Die Gutachter haben hervorragende Arbeit geleistet. Dank an Vladimir G. Ivanovic, Craig Riecke, Paul Butcher, Fred Daoud, Aaron Bedra, David Eisinger, Antonio Cangiano und Brian Tarbox. Sie bildeten das effektivste Team, mit dem ich jemals zusammengearbeitet habe. Das Buch ist dadurch wesentlich besser. Ich weiss, dass das Korrigieren eines Buches auf dieser Ebene eine undankbare, anstrengende Arbeit ist. Diejenigen unter uns, die technische Bücher immer noch mögen, werden es ihnen danken. Das Verlagswesen wäre ohne sie unmöglich.

Ich möchte auch denen danken, die ihre Ideen zur Auswahl von Sprachen und der Programmier-Philosophie mit mir geteilt haben. Zu unterschiedlichen Zeitpunkten lieferten Neal Ford, John Heintz, Mike Perham und Ian Warshak wichtige Beiträge. Diese Art der Unterhaltung lässt mich schlauer aussehen, als ich eigentlich bin.

Den Beta-Lesern möchte ich danken, dass sie das Buch gelesen und mich am Arbeiten gehalten haben. Die Kommentare zeigten mir, dass die Sprachen tatsächlich durchgearbeitet und nicht nur überflogen wurden. Ich habe das Buch bisher basierend auf hunderten von Kommentaren korrigiert, und ich erwarte, dass in der Lebensspanne dieses Buches noch einiges dazukommt.

Schlussendlich gilt mein Dank dem Team von Pragmatic Bookshelf. Dave Thomas und Andy Hunt hatten einen nicht zu ermessenden Einfluss auf meine Karriere als Programmierer und auch als Autor. Diese Publishing-Plattform hat das Schreiben wieder rentabel für mich gemacht. Wir können ein Buch wie dieses (das sich nicht an den Massenmarkt richtet) finanzell interessant machen. Dank an alle Mitglieder des Publishing-Teams. Jackie Carter reichte mir die freundliche Hand und gab mir die Führung, die dieses Buch brauchte. Ich hoffe, er hat unsere Unterhaltungen so sehr genossen wie ich. Dank an all diejenigen, die im Hintergrund an diesem Buch gearbeitet haben. Insbesondere möchte ich dem Team danken, dass dafür gesorgt hat, dass dieses Buch gut aussieht und die all meine schlechten Angewohnheiten ausgemerzt haben: Kim Wimpsett erledigte die Korrekturen, Seth Maislin, den Index, Steve Peter den Satz und Janet Furlow die Produktion. Das Buch wäre ohne sie nicht, was es ist.

Wie immer bin ich für alle Fehler verantwortlich, die sich eingeschlichen haben. Diejenigen, die ich vergessen habe, bitte ich höflichst um Entschuldigung. Es war keine Absicht.

Zum Schluß möchte ich allen Lesern danken. Ich denke, dass echte, gedruckte Bücher einen Wert haben und ich kann meiner Leidenschaft, dem Schreiben, fröhnen, weil Sie das auch so sehen.

Bruce Tate

Vorwort

Aus dem noch zu schreibenden „Wie Proust Sie zu einem besseren Programmierer macht".

Von Joe Armstrong, Entwickler von Erlang

„Der Gmail-Editor kann mit typographischen Anführungszeichen nicht richtig umgehen."

„Skandalös, sagte Margery, „das Zeichen eines ungebildeten Programmierers und einer dekadenten Kultur.

„Was sollen wir damit machen?"

„Wir müssen darauf beharren, dass die nächsten von uns angestellten Programmierer ‚A la recherche du temps perdu‘ komplett gelesen haben."

„Alle sieben Bände? „Alle sieben Bände.

„Wird das ihre Interpunktion verbessern und die Anführungszeichen wieder in Ordnung bringen?"

„Nicht unbedingt, aber es wird sie zu besseren Programmierern machen. Das ist so ein Zen-Ding ..."

Programmieren lernen ist wie schwimmen lernen. Keine Theorie kann den Sprung in den Pool, das Strampeln im Wasser und das nach Luft schnappen ersetzen. Wenn Sie das erste Mal unter Wasser sinken, geraten Sie in Panik, doch sobald Sie die Oberfläche erreichen und etwas Luft einatmen, fühlen Sie sich ermutigt. Sie denken für sich „ich kann schwimmen". Zumindest fühlte ich mich so, als ich schwimmen lernte.

Mit der Programmierung ist es das gleiche. Sie brauchen einen guten Lehrer, der Sie ermutigt ins Wasser zu springen.

Bruce Tate ist ein solcher Lehrer. Dieses Buch gibt Ihnen die Gelegenheit, den schwierigsten Teil des „Programmieren lernens" zu lernen, nämlich anzufangen.

Nehmen wir an, dass Sie die schwierige Aufgabe gemeistert haben, den Interpreter oder Compiler für die Sprache, an der Sie interessiert sind, herunterzuladen und zu installieren. Was sollen Sie als nächstes tun? Was wird Ihr erstes Programm sein?

Bruce beantwortet diese Frage sehr geschickt. Geben Sie einfach die Programme und Programmfragemente aus diesem Buch ein und schauen Sie, ob Sie die Ergebnisse reproduzieren können. Denken Sie noch nicht an das Schreiben eigener Programme — versuchen Sie nur, die Beispiele in diesem Buch zu reproduzieren. Sobald Ihre Zuversicht gewachsen ist, können Sie eigene Programmierprojekte angehen.

Der erste Schritt beim Erlernen neuen Fachwissens besteht nicht darin, eigene Dinge zu tun, sondern darin, das reproduzieren zu können, was andere Leute schon gemacht haben. Das ist der schnellste Weg, sich neues Fachwissen anzueignen.

Wenn Sie mit der Programmierung in einer neuen Sprache beginnen, geht es nicht so sehr darum, die der Sprache zugrundeliegenden Prinzipien zu verstehen. Vielmehr geht es zuerst darum, die Semikola und Kommata an den richtigen Stellen zu setzen, und die komischen Fehlermeldungen zu verstehen, die erscheinen, sobald Sie einen Fehler machen. Erst wenn Sie die lästige Aufgabe gemeistert haben, ein Programm einzugeben und fehlerfrei durch den Compiler zu jagen, können Sie damit anfangen, über die Bedeutung der verschiedenen Sprachkonstrukte nachzudenken.

Sobald Sie die Mechanik der Eingabe und Ausführung von Programmen gemeistert haben, können Sie sich zurücklehnen und entspannen. Ihr Unterbewusstsein erledigt den Rest. Während Ihr Bewusstsein ergründet, wo die Semikola hingehören, findet ihr Unterbewusstsein die tiefere Bedeutung der unter der Oberfläche liegenden Strukturen heraus. Dann wachen Sie eines Morgens plötzlich auf und verstehen die tiefere Bedeutung eines Logik-Programms oder warum eine bestimmte Sprache ein bestimmtes Konstrukt besitzt.

Ein wenig über viele Sprachen zu wissen ist eine nützliche Fähigkeit. Ich musste häufig ein wenig von Python oder Ruby verstehen, um ein bestimmtes Problem lösen zu können. Die Programme, die ich aus dem Internet herunterlade, sind in den unterschiedlichsten Sprachen geschrieben und verlangen eine gewisse Anpassung, bevor ich sie nutzen kann.

Jede Sprache hat ihren eigenen Satz an Idiomen, Stärken und Schwächen. Indem Sie verschiedene Programmiersprachen lernen, sind Sie in der Lage zu erkennen, welche Sprache für die Art von Problemen am besten geeignet ist, die Sie lösen möchten.

Ich freue mich zu sehen, dass Bruces Geschmack bei Programmiersprachen so vielseitig ist. Er behandelt nicht nur so etablierte Sprachen wie Ruby, sondern auch weniger bekannte Sprachen wie Io. Letztlich geht es beim Programmieren um das Verstehen, und beim Verstehen geht es um Ideen. Die Auseinandersetzung mit neuen Ideen ist daher wesentlich für ein tieferes Verständnis dessen, worum es beim Programmieren eigentlich geht.

Ein Zen-Meister könnte Ihnen empfehlen, Latein zu lernen, um Mathematik besser zu verstehen. Das gilt auch für das Programmieren. Um das Wesentliche an der OO-Programmierung zu verstehen, sollten Sie sich die logische und funktionale Programmierung (FP) ansehen. Und um die FP besser zu meistern, sollten Sie sich Assembler anschauen.

Programmiersprachen vergleichende Bücher waren populär, als ich Programmierer wurde. Doch meist handelte es sich um akademische Schinken, die nur wenige praktische Hinweise zur Nutzung einer Sprache lieferten. Das reflektierte die Technik jener Zeit. Sie konnten etwas über die Ideen einer Sprache nachlesen, doch sie auszuprobieren war nahezu unmöglich.

Heute können wir nicht nur etwas über diese Ideen nachlesen, sondern sie auch gleich in der Praxis ausprobieren. Das macht den Unterschied aus: am Beckenrand stehen und sich zu fragen, ob schwimmen Spaß macht, oder einzutauchen und das Wasser genießen.

Ich lege Ihnen dieses Buch wärmstens ans Herz und hoffe, dass Sie es so geniessen wie ich.

Joe Armstrong, Entwickler von Erlang

2. März 2010

Stockholm

Kapitel 1. Einführung

Menschen lernen Sprachen aus den unterschiedlichsten Gründen. Ihre Muttersprache haben Sie gelernt, um überhaupt leben zu können. Sie stellt das Werkzeug dar, das ihnen dabei hilft, den Alltag zu meistern. Wenn Sie eine zweite Sprache erlernt haben, kann das verschiedene Gründe gehabt haben. Manchmal muss man eine zweite Sprache der Karriere wegen lernen, oder um sich an eine veränderte Umgebung anzupassen. Doch manchmal lässt man sich auf eine neue Sprache ein, nicht weil man sie lernen muss, sondern weil man sie lernen will. Eine zweite Sprache kann Ihnen dabei helfen, neue Welten zu entdecken. Sie könnten sogar Erleuchtung suchen, da Sie wissen, dass jede neue Sprache auch das Denken formt.

Das Gleiche gilt für Programmiersprachen. In diesem Buch werde ich Ihnen sieben verschiedene vorstellen. Dabei möchte Sie auf eine Reise mitnehmen, die Sie aufklären und Ihren Blick auf das Programmieren verändern soll. Ich werde Sie nicht zum Experten machen, aber ich werden Ihnen mehr beibringen als bloß Hallo Welt!

1.1 Wahnsinn mit Methode

Wenn ich eine neue Programmiersprache oder ein neues Framwork erlerne, suche ich meist nach einem kurzen, interaktiven Tutorial. Mein Ziel ist es, die Sprache in einer komtrollierten Umgebung zu erleben. Bei Bedarf kann ich etwas eingehender untersuchen, doch im Wesentlichen geht es mir um eine schnelle Dosis Koffein, einen Schnappschuss des syntaktischen Zuckers und um die Kernkonzepte.

Aber üblicherweise ist diese Erfahrung nicht besonders erhellend. Wenn Sie den wahren Charakter einer Sprache kennenlernen wollen, die mehr ist als eine bloße Erweiterung einer Sprache, die Sie schon kennen, dann wird ein kurzes Tutorial niemals funktionieren. Sie müssen schnell und tief eintauchen.

Dieses Buch bietet Ihnen diese Erfahrung nicht nur ein-, sondern gleich siebenmal. Sie finden Antworten auf die folgenden Fragen:

Welches Modell der Typisierung wird verwendet? Die Typisierung kann stark (Java) oder schwach (C), statisch (Java) oder dynamisch (Ruby) sein. Die Sprachen in diesem Buch reichen vom stark typisierten Ende des Spektrums bis hin zu einem breiten Mix aus statisch und dynamisch. Sie werden sehen, wie sich die jeweiligen Kompromisse bzw. Nachteile für den Entwickler auswirken. Das Typisierungsmodell prägt die Art und Weise, in der Sie ein Problem angehen, und kontrolliert, wie die Progammiersprache funktionert. Jede Sprache in diesem Buch hat ihre eigenen Typisierungs-Eigenarten.

Welches Programmiermodell wird verwendet? Ist es objektorientiert, funktional, prozedural oder irgendeine Art Hybrid? Dieses Buch behandelt Sprachen mit vier verschiedenen Programmiermodellen, manchmal auch Kombinationen mehrerer Modelle. Sie werden eine logikbasierte Programmiersprache (Prolog) vorfinden, zwei Sprachen, die vollständig objektorientierte Konzepte unterstützen (Ruby, Scala), vier Sprachen funktionaler Natur (Scala, Erlang, Clojure, Haskell) sowie eine Prototyp-Sprache (Io). Mehrere Sprachen unterstützen auch mehrere Paradigmen, z. B. Scala. Clojures Multimethoden erlauben es Ihnen sogar, ein eigenes Paradigma zu implementieren. Das Erlernen neuer Programmierparadigmen ist eines der wichtigsten Konzepte dieses Buches.

Wie interagiert man mit ihr? Sprachen werden kompiliert oder interpretiert und einige verwenden virtuelle Maschinen, andere hingegen nicht. Ich beginne meine Erkundung mit einer interaktiven Shell, wenn es denn eine gibt. Ich gehe dann zu Dateien über, wenn es an der Zeit ist, größere Projekte anzugehen. Unsere Projekte werden aber nicht groß genug sein, um vollständig in die Paketmodelle einzutauchen.

Was sind die Entscheidungskonstrukte und die Kern-Datenstrukturen?Sie werden überrascht sein, wie viele Sprachen Entscheidungen mit etwas anderem als Varianten von ifs und whiles treffen können. Sie werden die Mustererkennung (Pattern Matching) in Erlang und die Vereinigung (unification) in Prolog kennenlernen. Collections („Sammlungen") spielen in nahezu jeder Sprache eine wichtige Rolle. Bei Sprachen wie Smalltalk und Lisp definieren Collections die Charakeristika der Sprache. Bei anderen, wie C++ und Java, sind Collections überall verstreut und definieren das Erleben des Benutzers durch ihr Fehlen und ein geringeres Maß an Stringenz. So oder so sollte man sich mit Collections gut auskennen.

Welche Kerneigenschaften machen die Sprache einzigartig? Einige Sprachen besitzen fortgeschrittene Fähigkeiten für die nebenläufige Programmierung (concurrent programming). Andere bieten einzigartige High-Level-Konstrukte wie etwa Clojures Makros oder Ios Message-Interpretation. Andere bieten eine leistungsfähige virtuelle Maschine, wie etwa Erlangs BEAM: Dank ihr kann man mit Erlang fehlertolerante, verteilte Systeme wesentlich schneller aufbauen, als es mit anderen Sprachen möglich ist. Einige Programmiersprachen unterstützen Programmiermodelle, die sich auf ein bestimmtes Problem konzentrieren. Etwa die Verwendung von Logik zur Lösung von Beschränkungen (constraints).

Wenn Sie mit diesem Buch fertig sind, werden Sie kein Experte für eine dieser Sprachen sein, aber Sie werden wissen, welche einzigartigen Eigenschaften sie besitzen. Sehen wir uns die Sprachen an.

1.2 Die Sprachen

Die Auswahl der Sprachen für dieses Buch war wesentlich einfacher, als Sie vielleicht glauben: Ich habe einfach potenzielle Leser gefragt. Nachdem wir uns alle Daten näher angesehen hatten, blieben acht Kandidaten übrig. Ich habe JavaScript gestrichen, weil es mir zu beliebt ist, und durch die zweitpopulärste Prototypsprache Io ersetzt. Ich habe auch Python gestrichen, weil ich nur eine objektorientierte Sprache wollte und Ruby höher auf der Liste stand. Das schuf Raum für einen überraschenden Kandidaten, Prolog, das auf der Liste unter den Top-Ten war. Hier die Sprachen, die es geschafft haben, sowie die Gründe für ihre Wahl:

Ruby.Diese objektorientierte Sprache erhält gute Noten wegen ihrer einfachen Verwendbarkeit und guten Lesbarkeit. Ich habe kurz daran gedacht, überhaupt keine objektorientierte Sprache aufzunehmen, aber ich wollte die verschiedenen Programmierparadigmen mit der objektorientierten Programmierung (OOP) vergleichen, weshalb es wichtig war, zumindest eine OOP-Sprache aufzunehmen. Ich wollte Ruby außerdem etwas mehr fordern, als das die meisten Programmierer tun, und den Lesern eine Vorstellung von den Grundentscheidungen vermitteln, die das Design von Ruby geprägt haben. Ich habe mich entschieden, in die Ruby-Metaprogrammierung einzutauchen, was es mir erlaubt, die Syntax der Sprache zu erweitern. Ich bin recht zufrieden mit dem Ergebnis.

Io. Neben Prolog ist Io die umstrittenste Sprache, die ich aufgenommen habe. Sie ist kommerziell nicht erfolgreich, doch die Konstrukte zur Nebenläufigkeit mit ihrer Einfachheit und ihrer gleichförmigen Syntax sind wichtige Konzepte. Die minimale Syntax ist leistungsfähig und die Ähnlichkeit zu Lisp manchmal verblüffend. Io hat einen kleinen „Footprint", ist eine Prototypsprache wie JavaScript und besitzt einen einzigartigen Mechanismus zum Message-Dispatch, den Sie (glaube ich) interessant finden werden.

Prolog. Ja, ich weiß, sie ist alt, aber eben auch extrem leistungsfähig. Das Lösen eines Sudoku-Rätsels in Prolog war eine Erfahrung, die mir die Augen geöffnet hat. Ich habe hart daran gearbeitet, schwierige Probleme in Java oder C zu lösen, die in Prolog ohne besondere Mühe hätten gelöst werden können. Joe Armstrong, der Schöpfer von Erlang, half mir dabei, ein tieferes Verständnis für diese Sprache zu entwickeln, die Erlang stark beeinflusst hat. Wenn Sie noch nicht die Gelegenheit hatten, sie zu verwenden, werden Sie angenehm überrascht sein.

Scala. Als Mitglied der neuen Generation von Sprachen für die Java Virtual Machine hat Scala starke funktionale Konzepte in das Java-Ökosystem eingeführt. Sie schließt auch OOP mit ein. Rückblickend

Sie haben das Ende dieser Vorschau erreicht. , um mehr zu lesen!
Seite 1 von 1

Rezensionen

Was die anderen über Sieben Wochen, sieben Sprachen (Prags) denken

0
0 Bewertungen / 0 Rezensionen
Wie hat es Ihnen gefallen?
Bewertung: 0 von 5 Sternen

Leser-Rezensionen