Navigation: Homepage | xmlgawk | Buchkritik | Sitemap

Die wichtigsten Programmiersprachen

Bjarne Stroustrup hat schöne Slides erstellt, die die wichtigsten Sprachen, Schlüsselpersonen und Jahre aufzeigen: http://courses.cs.tamu.edu/petep/24%20ideals_and_history.pdf Eine schöne Web Zusammenstellung ist auch: http://littletutorials.com/2008/06/15/creators-of-programming-languages/

Mit Abstand die besten Informationen zur Geschichte der wichtigsten Programmiersprachen findet man in den Proceedings der HOPL Konferenz. Wer keinen Zugriff auf diese Bücher hat, und das dürften die meisten sein, der kann sich bei Wikipedia informieren: http://en.wikipedia.org/wiki/HOPL

C

Hier gibt es eigentlich nur zwei Pflichtbücher und ein optionales:

C++

Alle Bücher von Scott Meyers sind hier sehr zu empfehlen. Den Stroustrup muss man sich vorher ansehen, den der ist ziemlich chaotisch aufgebaut.

Objective-C

Apple verwendet für Mac OS X (auf Mac und iPhone) Objective-C als Programmiersprache. Die Sprache selber ist eine Mischung aus C und Smalltalk und bietet recht viel Introspection-Möglichkeiten. Eine aktuelle Empfehlung für ein Buch kann ich nicht geben, deswegen hier ein paar Links:

Ruby

Ruby ist eigentlich keine besondere Sprache, aber es hat zwei ganz tolle Sachen:

Details finden sich in Pick Axe (ProgrammingRuby). Im Juni 2006 ist ein Free Ebook zu Ruby erschienen: http://www.sapphiresteel.com/The-Little-Book-Of-Ruby

Interessant ist, das Ruby (wie Lisp oder Erlang) auch Zugriff auf den Parsetree zur Compiletime erlaubt. Dies eröffnet viele Möglichkeiten, z.B. SQL on-the-fly generieren: http://errtheblog.com/post/10722 .

Java

Zu Java Büchern kann ich nichts sagen, da gibt es zu viel... Aber es gibt inzwischen für viele Programmiersprachen eine Java Implementation: http://www.robert-tolksdorf.de/vmlanguages.html

Prof. Kahan ist bekanntlich der Spezialist zum Thema Fliesskommaarithmetik. Er hat den HP-34C und den HP-15C mit exzellenter Arithmetik versehen und war wesentlich am IEEE-754 Standard beteiligt. Er hat einen bemerkenswerten Artikel zur Arithmetik bei Java geschrieben (84 Seiten): http://www.cs.berkeley.edu/~wkahan/JAVAhurt.pdf

Perl

Da gibts eigentlich nur das Camel-Book von Wall, Christiansen und Schwartz. http://www.amazon.de/exec/obidos/ASIN/0596000278

Oder HigherOrderPerl, das ist zwar keine Einführung in Perl, zeigt aber wunderschön die Möglichkeiten und vor allem wie nett auch Perl Code aussehen kann.

Das Perl Cookbook von O'Reilly enthält viele Codebeispiele. Es gibt auch ein Website, in der diese Codebeispiele in verschiedene Programmiersprachen übersetzt sind: http://pleac.sourceforge.net/

Cantonmat erklärt die Perl Oneliners auf http://www.catonmat.net/blog/perl-one-liners-explained-part-one/

Ein Soduko Solver in Perl auf der Basis von regexp-matching, kurios aber hinreichend flott: http://n01senet.blogspot.com/2007/05/sudoku-by-regex.html

Perl5 umranken einige Mythen, hier wird mit den wichtigsten drei aufgeräumt: http://blog.timbunce.org/2008/03/08/perl-myths/

Python

Ich glaube hier ist Mirko (http://mirko-dziadzka.de/) der bessere Ansprechpartner. "The Quick Python Book" von Harms und McDonald (http://www.amazon.de/exec/obidos/ASIN/1884777740) hat mir ganz gut gefallen, aber das O'Reilly Nutshell Buch ist bestimmt auch gut.

Online verfügbar ist "Dive into Python" unter: http://diveintopython.org/index.html

Tcl

Tcl Bücher gibts auch ein paar. Dummerweise legen viele den Schwerpunkt auf Tk. Thorsten Kleindienst schwört auf den Brent Welch, ich selbst habe nur die Tcl Kurzreferenz von O'Reilly. Hier der Welch http://www.amazon.de/exec/obidos/ASIN/0130385603 in der vierten Auflage.

Tcl wird sehr häufig als Integrationssprache eingesetzt, auch im Zeitalter von Java: http://blogs.sun.com/blue/entry/using_wadm_in_sjswebserver_7

Javascript

Javascript hat ja einen seltsamen Ruf, deswegen musste ich das Buch "Javascript Application Cookbook" von O'Reilly http://www.amazon.de/exec/obidos/ASIN/1565925777 lesen (es lag bei Thomas im Regal). Die Sprache selbst ist eigentlich ganz nett, so eine Art AWK mit OO-Extensions, das hat mich beeindruckt. Die Integration in den Browser ist aber so eine Mischung aus Genialität und Alptraum. Die Beispiele aus dem Buch sind grauselig -- von Sicherheit hat der Author wohl nie was gehört -- zeigen aber ganz hübsch, was man für abstruse Sachen treiben kann, wenn eine gute Scriptsprache tief in eine Applikation integriert wird. Allerdings haben Netscape, Microsoft und das W3C ziemlich übertrieben.

Kurze Einführungen:

Cool finde ich einen Compiler, der Javascript um Continuations erweitert: http://neilmix.com/narrativejs/doc/index.html

Mit Javascript 2 kommen viel funktionale Aspekte in die Sprache, einen Vorgeschmack bietet Javascript 1.7: http://developer.mozilla.org/en/docs/New_in_JavaScript_1.7

Funktionale Spielereien mit Javascript finden sich hier: http://sundresh.org/talks/icfp08-js/ Hier werden die guten reflektiven Eigenschaften von Javascript interessant genutzt.

Nette Tricks mit Javascript 1.x findet man hier: http://aymanh.com/9-javascript-tips-you-may-not-know Aber aufgepasst, es gibt auch viele 'Fallen': http://www.fitzblog.com/tabid/17782/bid/2127/Nine-Javascript-Gotchas.aspx]

Praktisch finde ich den Tipp, wie man 'Namespaces' bzw. private und public Methoden nachbauen kann: http://www.wait-till-i.com/index.php?p=467 (Das Module Pattern).

'The Little Lisper' in Javascript http://javascript.crockford.com/little.html

Javascript in Javascript: http://lxr.mozilla.org/mozilla/source/js/narcissus/

Eine Javascript IDE im Browser mit Morphic (Squeak Smalltalk lässt grüssen): http://bitworking.org/news/290/JavaScript-is-the-new-Smalltalk

John Resig (jQuery) hat auch immer ein paar schöne Artikel zu bieten, wie http://ejohn.org/apps/learn/ oder http://ejohn.org/blog/adv-javascript-and-processingjs/ .

Was interessantes bei einer sehr 'freien' Sprache wie Javascript passieren kann: http://yura.thinkweb2.com/named-function-expressions/ .

Funktionale Programmierung in Javascript mit LiveScript?: http://gkz.github.com/LiveScript/blog/functional-programming-in-javascript-using-livescript-and-prelude-ls.html .

Lisp und Co.

Der Startingpoint ist hier sicher Paul Graham (http://www.paulgraham.com/). Auf seiner Website kann man ein recht gutes Lisp Buch herunterladen http://www.paulgraham.com/onlisp.html -- das hat mir gut gefallen. Vor allem seine Seitenhiebe auf Pattern, sind diese doch für Graham ein Anzeichen dafür, dass es an Abstraktionen mangelt. Überhaupt sind seine Artikel und vor allem seine Arbeit zu Spam (BMF) sehr spannend. Wer die Essenz von Lisp auf wenigen Seiten kennen lernen will, der muss http://www.paulgraham.com/rootsoflisp.html lesen. Der Code zum Download liegt unter http://lib.store.yahoo.net/lib/paulgraham/jmc.lisp. Basierend auf diesem Artikel habe ich in wenigen Zeilen Java einen kleinen Lisp Interpreter implementiert, download unter: http://www.tramm.li/download/ALang.tgz (Die verwendete Anything Implementation unterliegt der GNU Lizenz, vgl. COPYING.LIB, für meinen Code übernehme ich keine Haftung für gar nichts.)

Online Books zu Lisp:

Zu 'Scheme' seien die Grundlagentexte unter http://library.readscheme.org/page1.html empfohlen. Oder das 'HTDP' http://www.htdp.org/ . Die MIT Vorlesungen von Hal Abelson und Gerald Jay Sussman zu Structure and Interpretation of Computer Programs (aka SICP) sind online zugänglich http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/ . Weitere Rezensionen gibt es eine Menge, mögliche Lösungen sind hingegen nicht so leicht zu finden, aber es gibt sie doch http://eli.thegreenplace.net/category/programming/lisp/sicp/ . Eli hat annähernd ein Jahr für die Lösungen gebraucht.

Jason Brazile machte mich auf die Wesite von Peter Norvig aufmerksam. Unter http://www.norvig.com/ finden sich interessante Artikel zu Lisp, Python, AI und effiziente Suche von Titeln im iPod Shuffle -- echt nett.

Die Geschichte von Lisp: http://community.computerhistory.org/scc/projects/LISP/ und eine grosse Sammlung an Lisp Programmen und Implementationen: http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/0.html

Was SLIME für den Emacs ist LIMP (http://mikael.jansson.be/hacking/limp/docs/ http://vim.sourceforge.net/scripts/script.php?script_id=2219 ) für den Vim!

Funktionale Programmiersprachen

Die funktionalen Sprachen eröffnen eine andere Welt des Programmierens. Ohne Zuweisungen und Seiteneffekte werden eine ganze Reihe von Fehlerquellen abgeschafft. Leider ist das Finden der anderen Fehler, die der normale Programmierer so in seinen Code einbaut, schwieriger, da man nicht so einfach ein paar print() Aurufe einbauen kann... Die theoretischen Grundlagen hat D. Turner auf 20 Seiten zusammengefasst: http://www.cs.kent.ac.uk/people/staff/dat/miranda/ctfp.pdf Lesenswert ist das allemal und dümmer wird man auch nicht davon. Hier nur einige wenige Bücher:

S. L. Peyton Jones hat viele seiner Publikationen online gestellt: http://research.microsoft.com/~simonpj/Papers/papers.html und dort findet sich auch "Implementing Functional Languages - A Tutorial" zum Download. Seine Papers zum Thema "Giving a talk" helfen bestimmt: http://research.microsoft.com/~simonpj/Papers/giving-a-talk/giving-a-talk.htm

Eine schöne Linksammlung wurde im November 2006 auf Lambda-the-Ultimate veröffentlicht: http://www.md.chalmers.se/~rjmh/tutorials.html auch wenn die Seite seit 2001 nicht aktualisiert wurde und etwas Gofer lastig ist. Dafür gibt es bei haskell.org eine ganze Reihe von 'Functional Pearls' des JFP zum Download: http://haskell.org/haskellwiki/Research_papers/Functional_pearls

Das klassische Beispiel in Haskell:

 fac n = product [1..n]

Im Juni 2007 gab es (via http://programming.reddit.com/ ) einige Links zur Implementation der Suche nach der längsten Collatz-Sequenz. Auch Adam Turoff hat eine Implementation in Haskell vorgestellt: http://notes-on-haskell.blogspot.com/2007/06/solving-collatz-sequences.html Das liess mich nicht los, und hier ist die ksh93 Lösung:

 #!/bin/ksh93
 # implement the collatz sequence
 PATH=/usr/bin:/bin
 function length {
 	awk 'END {print NR}'
 }
 function maximum {
 	awk 'max<0+$1 {max=0+$1} END {print max}'
 }
 function foreach {
 	typeset command="$*"
 	while read -r; do
 		set -f -- $REPLY
 		eval $command
 	done
 }
 function iterate {
 	typeset f=${1:"echo"}
 	typeset -i fin=${2}
 	typeset -i i=${3}
 	while (( i != fin )); do
 		echo $i
 		i=$($f $i)
 	done
 	echo $fin
 }
 function collatz {
 	typeset -i n=${1}
 	if (( n % 2 == 1))
 	then echo $(( 3 * n + 1 ))
 	else echo $(( n / 2))
 	fi
 }
 # main
 while read -r s e; do
 	printf "longest collatz sqequence between %d and %d is " "$s" "$e"
 	jot - "$s" "$e" 1 |
 	foreach "( iterate collatz 1 \$1 | length )" |
 	maximum
 done <<EOI
 1   10
 100 200
 EOI

Smalltalk

Smalltalk ist die Mutter aller OO-Sprachen, wenn auch nicht die erste. Das Smalltalk-System ist (neben den ausgestorbenen Lisp Maschinen) immer noch ein tolles Beispiel dafür, wie homogene und leitsgungsfähige Systeme gebaut werden können. Auf jeden Fall ein Studie wert, deswegen einige Links:

Multiparadigm Sprachen

Programmiersprachen werden ja gemeinhin in Kategorien: prozedural, objekt-orientiert, funktional, deklarativ, parallel usw. eingeteilt. Jede bisher verwendete Sprache kann (mehr oder minder) einer Kategorie zugeordnet werden. Es gibt aber durchaus Ansätze, Paradigmen zu kombinieren (auch in den momentan aktuellen Sprachen). Ein Beispiel, dass diese Idee auf Spitze treibt, ist die Sprache "Leda". Timothy Budd beschreibt die Sprache in dem Buch "Multiparadigm Programming in Leda" von 1995. Ein schön zu lesender Text (in TeX gesetzt), für jeden der einmal ein bisschen über seinen OO-Rand gucken möchte. Leider auch nicht mehr erhältlich :-( http://www.amazon.de/exec/obidos/ASIN/0201820803

Ada

Eigentlich ist Ada auch eine Multiparadigmsprache, prozedural, objektorientiert und nebenläufig. Ada83, Ada95 und Ada05 sind die drei Dialekte, zu denen es noch einige Nischensubsets gibt.

Shell- und Scriptsprachen

Shell Programmierung findet sich in TheNewKornshell. AWK (die Mutter aller Scriptsprachen) in TheAWKProgrammingLanguage.

Assembler

Auch wenn heute kaum noch jemand Assembler programmiert (eigentlich schade), so gibt es doch frei verfügbare Bücher zum Thema:

Forth

Forth hat seine Stärken auf kleinen Maschinen, die Hardware-nah programmiert werden, z.B. Steuerungen. Die Literatur ist schon etwas in die Jahre gekommen, aber das wichtigste Buch Thinking Forth von Leo Brodie ist inzwischen frei erhältlich: http://thinking-forth.sourceforge.net/ Das andere Forth Buch "Starting FORTH" von 1981 ist ebenfalls online: http://home.iae.nl/users/mhx/sf.html Eine ziemlich vollständige Liste von Forth Büchern findet sich hier: http://www.mpeforth.com/books.htm . Das Forth vor allem für Hardware Bastler spannend ist, sieht man hier: http://www.bradrodriguez.com/papers/ .

Die FORTH Zeitschrift 'Forth Dimensions' from 1978 to 1999 (volumes 1 - 21) are available at: http://www.forth.org/fd/contents.html .

Charles Moore ist immer gut für einen trockenen Spruch, wie zum Thema 'Copmplexity': http://groups.google.com/group/comp.lang.forth/msg/5f7da02bafa24f61

Interessant finde ich auch, wie Ideen der funktionalen Programmierung, konkret abstract datatypes und pattern-matching, auf Forth appliziert werden können: http://wiki.forthfreak.net/index.cgi?FunForth

Und die Nasa hat doch einige Projekte mit Forth abgewickelt: http://forth.gsfc.nasa.gov/

Compilerbau

Zum Thema Compilerbau gibt es enorm viel Bücher, z.B. von Aho et. al. das "Drachenbuch" http://www.amazon.de/exec/obidos/ASIN/0201100886 (eher was fürs Studium) oder die von Andrew Appel (aktuell mit Java http://www.amazon.de/exec/obidos/ASIN/0521583888 -- habe ich leider noch nicht reingesehen).

Ich möchte hier nur auf ein sehr kleines aber feines Büchlein aufmerksam machen, nämlich "Grundlagen und Techniken des Compilerbaus" von Niklaus Wirth (http://www.amazon.de/exec/obidos/ASIN/3486243748). Es ist quasi die dritte Auflage seines Buches "Compilerbau" und zeigt am Beispiel einer Untermenge von Oberon (dritte Auflage von Pascal ;-) einen Einpasscompiler für einen MIPS-ähnlichen 32 Bit RISC Prozessor (siehe auch ComputerOrganizationDesign COD2e). Die vorgestellten Techniken sind nicht unbedingt praxisfern, sind doch einige Tricks in den Java Hotspot JIT Compiler eingeflossen.

Pascal

Eigentlich mag ich Pascal nicht besonders, aber wenn schon ein 'freies' Buch inkl. Compiler, p-Code Interpreter und Quellen (und C Source zum Bootstrap) auf dem Web verfügbar ist, dann soll hier wenigstens der Link aufgeführt werden: http://homepages.cwi.nl/~steven/pascal/

Ein bisschen Geschichte zu Pascal-P und dem UCSD p-code System findet sich im Jefferson Computer Museum: http://www.threedee.com/jcm/psystem/

Cobol

Auch Cobol gehört nicht zu meinen Favoriten, aber dieser kleine Artikel erklärt schon dir grundlegensten Features: http://trustafriend.com/articles/index.php?operation=display_article&article_id=2&title_caption=Is%20COBOL%20really%20understandable%20after%2014%20years .

Anhang

Wer es bis hieher geschafft hat, möchte vielleicht noch mehr zu Programmiersprachen und vor allem 'freien' Büchern dazu, erfahren: http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books/

Datum

8-Jan-2003

last modified: $Date: 2012/06/20 18:47:22 $