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
Hier gibt es eigentlich nur zwei Pflichtbücher und ein optionales:
Alle Bücher von Scott Meyers sind hier sehr zu empfehlen. Den Stroustrup muss man sich vorher ansehen, den der ist ziemlich chaotisch aufgebaut.
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 ist eigentlich keine besondere Sprache, aber es hat zwei ganz tolle Sachen:
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 .
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
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/
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 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 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 .
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!
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 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:
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
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 Programmierung findet sich in TheNewKornshell. AWK (die Mutter aller Scriptsprachen) in TheAWKProgrammingLanguage.
Auch wenn heute kaum noch jemand Assembler programmiert (eigentlich schade), so gibt es doch frei verfügbare Bücher zum Thema:
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/
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.
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/
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 .
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/
8-Jan-2003