<?xml version="1.0"?>
<!-- name="generator" content="blosxom/2.0" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
  <channel>
    <title>Notebooks   </title>
    <link>http://bactra.org/notebooks</link>
    <description>Cosma's Notebooks</description>
    <language>en</language>

  <item>
    <title>Programming</title>
    <link>http://bactra.org/notebooks/2009/06/13#programming</link>
    <description>
&lt;P&gt;I've been programming since I was about ten --- that was on a delapidated
TRS-80 Model I, with 16k RAM, which someone had donated to my school.  It had
no storage device (or maybe we just didn't have any disks?), so we wrote BASIC
programs that could fit into our own memory.  I remember being very proud to
get it to plot quadratic functions.

&lt;P&gt;I can handle BASIC.  I've acquired some skill at Fortran, at any rate
Fortran 90.  (Heck, I wrote a &lt;a href=&quot;evol-comp.html&quot;&gt;genetic algorithm&lt;/a&gt; in
it once.)  I fell in love with LISP when I took freshman CS at Cal.  I've even
worked in assembly on, may the gods have mercy, a Commodore 64.  But.

&lt;P&gt;I'm learning C.  I have delayed doing so as long as possible; now I have to
deal with a simulation program which will only save its results in Windows
bitmap graphics files.  As initiation rites go, I think I'd prefer tattooing
without an&amp;aelig;sthesia.  Malloc is evil.  So is the distinction between
&quot;=&quot;, which is the assignment operator, and &quot;==&quot;, which is the equality
operator, said distinction having just cost me an evening.  I have no words to
express my feelings about things like &quot;%=&quot;.  C is, quite literally, taking
over my mind: I very distinctly remember a dream last week which was about
cooking but in C.  [10 March 1996; the dreams went away.]

&lt;P&gt;I've actually developed a great deal of affection for C (doubtless this is
what the psychologists call &quot;effort justification,&quot; also known as the sunk cost
fallacy), and for instance now do all my numerical coding in it.  I am however
having to learn C++, which is such a silly instance of object orientation that
I almost believe the joke about how it was invented to keep programmers in
business indefinitely.  On the other hand, I've also been learning Perl and
Expect, and they are pure delights; in both cases I was writing useful programs
within an hour of opening the manual.  Expect in particular is wonderful for
making Unix do things for you, and for hiding a physicist's idea of a user
interface.  --- Probably not the least reason for my affection for C is having
to write control code for a fairly complicated and undocumented piece of
hardware in Forth... [24 June 1998]

&lt;P&gt;Learning a little Java was &lt;a
href=&quot;../weblog/archives/000222.html&quot;&gt;instructive&lt;/a&gt;.  Now &lt;a
href=&quot;http://perso.ens-lyon.fr/jean-baptiste.rouquier/&quot;&gt;Jean-Baptiste
Rouquier&lt;/a&gt;, who's my student for the summer, has persuaded me that I need to
learn &lt;a href=&quot;http://caml.inria.fr/&quot;&gt;Caml&lt;/a&gt;.  Unfortunately, there's no
O'Reilly &lt;citE&gt;Caml in a Nutshell&lt;/cite&gt; handbook (perhaps because it'd cause
too much confusion with &lt;cite&gt;Programming Perl&lt;/cite&gt;), just the 400-page
manual.  [2 July 2004]

&lt;P&gt;&lt;em&gt;See also:&lt;/em&gt;
	&lt;a href=&quot;computers.html&quot;&gt;Computers&lt;/a&gt;;
	&lt;a href=&quot;computation.html&quot;&gt;Abstract Computation&lt;/a&gt;;
	&lt;a href=&quot;math.html&quot;&gt;Math I Ought to Learn&lt;/a&gt;;
	&lt;a href=&quot;parallel.html&quot;&gt;Parallel and Distributed Programming&lt;/a&gt;;
	&lt;a href=&quot;christopher-alexander.html&quot;&gt;Christopher Alexander&lt;/a&gt;;
	&lt;a href=&quot;computational-statistics.html&quot;&gt;Computational Statistics&lt;/a&gt;

&lt;ul&gt;Recommended:
	&lt;li&gt;Abelson and Sussman, &lt;cite&gt;Structure and Interpretation of Computer
Programs&lt;/cite&gt; [2nd edition &lt;a
href=&quot;http://mitpress.mit.edu/sicp/&quot;&gt;on-line&lt;/a&gt;. Somebody please tell me why I
sold my copy?]
	&lt;li&gt;Timothy Budd, &lt;cite&gt;Understanding Object-Oriented Programming with
Java&lt;/cite&gt;
	&lt;li&gt;Cormen, Leiserson, Rivest and Stein, &lt;cite&gt;Introduction to
Algorithms&lt;/citE&gt;
	&lt;li&gt;Jutta Degener, &lt;a
href=&quot;http://kbs.cs.tu-berlin.de/~jutta/c/&quot;&gt;Programming in C&lt;/a&gt; page
	&lt;li&gt;Brian W. Kernighan and Dennis M. Ritchie, &lt;cite&gt;The C Programming
Language&lt;/cite&gt;
	&lt;li&gt;Don Libes, &lt;cite&gt;Exploring Expect&lt;/cite&gt; and the &lt;a
href=&quot;http://expect.nist.gov/&quot;&gt;Expect Home Page&lt;/a&gt;
	&lt;li&gt;Steve Oualline
		&lt;ul&gt;
		&lt;li&gt;&lt;cite&gt;Practical C Programming&lt;/cite&gt;
		&lt;li&gt;&lt;cite&gt;Practical C++ Programming&lt;/cite&gt;
		&lt;/ul&gt;
	&lt;li&gt;William H. Press, Saul A. Teukolsky, William T. Vetterling, and
Brian P. Flannery, &lt;cite&gt;&lt;a
href=&quot;http://www.ulib.org/Books/Numerical_Recipes/bookc.html&quot;&gt;Numerical Recipes
in C&lt;/a&gt;&lt;/cite&gt; and &lt;cite&gt;&lt;a
href=&quot;http://www.ulib.org/Books/Numerical_Recipes/bookf.html&quot;&gt;Numerical Recipes
in Fortran&lt;/a&gt;&lt;/cite&gt; [2nd editions of both are on-line]
	&lt;li&gt;Randal L. Schwartz &lt;cite&gt;Learning Perl&lt;/cite&gt;
	&lt;li&gt;Peter Seebach, &lt;a
href=&quot;http://www.plethora.net/~seebs/faqs/c-iaq.html&quot;&gt;comp.lang.c Infrequently
Asked Questions&lt;/a&gt;
	&lt;li&gt;David Touretzky, &lt;cite&gt;Common LISP: A Gentle Introduction to
Symbolic Computation&lt;/cite&gt; [&lt;a
href=&quot;http://www.cs.cmu.edu/~dst/LispBook/&quot;&gt;On-line&lt;/a&gt;]
	&lt;li&gt;Larry Wall and Randal Schwartz, &lt;cite&gt;Programming Perl&lt;/cite&gt;
	&lt;/ul&gt;

&lt;ul&gt;To read:
	&lt;li&gt;Gregory R. Andrews, &lt;cite&gt;Foundations of Multithreaded, Parallel,
and Distributed Programming&lt;/cite&gt;
	&lt;li&gt;Beck, &lt;cite&gt;Extreme Programming Explained&lt;/cite&gt; [A friend who
actually does software development for a (partial) living raves about this]
	&lt;li&gt;Nathaniel Borenstein, &lt;cite&gt;Programming as if People Mattered:
Friendly Programs, Software Engineering, and Other Noble Delusions&lt;/cite&gt;
	&lt;li&gt;Brookes, &lt;cite&gt;The Mythical Man-Month&lt;/cite&gt;
	&lt;li&gt;Martin Campbell-Kelly, &lt;cite&gt;From Airline Reservations to Sonic the
Hedgehog: A History of the Software Industry&lt;/cite&gt;
	&lt;li&gt;John M. Chambers, &lt;cite&gt;Software for Data Analysis: Programming
with R&lt;/cite&gt;
	&lt;li&gt;Mathias Felleisen et al., &lt;cite&gt;How to Design
Programs: An Introduction to Programming and Computing&lt;/cite&gt; [&lt;a
href=&quot;http://mitpress.mit.edu/9780262062183&quot;&gt;blurb&lt;/a&gt;]
	&lt;li&gt;Frantisek Franek, &lt;cite&gt;Memory as a Programming Concept in C and
C++&lt;/cite&gt; [&quot;Most professional programmers learn about [the role of memory]
entirely through actual experience of the problems it
causes&quot;... &lt;a href=&quot;http://cambridge.org/9780521520430&quot;&gt;Blurb&lt;/a&gt;]
	&lt;li&gt;Ben Fry, &lt;cite&gt;Visualizing Data&lt;/cite&gt;
	&lt;li&gt;Gamma, Helm, Johnson and Vlissides, &lt;cite&gt;Design Patterns: Elements
of Reusable Object-Oriented Software&lt;/cite&gt;
	&lt;li&gt;Jon D. Harrop, &lt;cite&gt;OCaml for Scientists&lt;/cite&gt;
	&lt;li&gt;Daniel Jackson, &lt;cite&gt;Software Abstractions: Logic, Language,
and Analysis&lt;/citE&gt; [&lt;a href=&quot;http://mitpress.mit.edu/9780262101141&quot;&gt;blurb&lt;/a&gt;]
	&lt;li&gt;Brian W. Kernighan and Rob Pike, &lt;citE&gt;The Practice of Programming&lt;/cite&gt;
	&lt;li&gt;Ben Klemens, &lt;cite&gt;Modeling with Data&lt;/cite&gt;
[&lt;a href=&quot;http://press.princeton.edu/titles/8706.html&quot;&gt;Blurb, ch. 1&lt;/a&gt;; &lt;a href=&quot;http://modelingwithdata.org/&quot;&gt;author's book site&lt;/a&gt;]
	&lt;li&gt;Donald E. Knuth, &lt;cite&gt;The Art of Computer Programming&lt;/cite&gt; [&lt;a
href=&quot;http://dannyreviews.com/h/Art_Programming.html&quot;&gt;Review&lt;/a&gt; by Danny Yee,
not that it needs one...]
	&lt;li&gt;Hans P. Langtangen, &lt;cite&gt;Python Scripting for Computational
Science&lt;/cite&gt;
	&lt;li&gt;Xavier Leroy (et cie), &lt;cite&gt;The Objective Caml System&lt;/cite&gt; [&lt;a
href=&quot;http://caml.inria.fr/ocaml/htmlman/&quot;&gt;Online in a plethora of formats&lt;/a&gt;]
	&lt;li&gt;Lutz and Ascher, &lt;cite&gt;Learning Python&lt;/cite&gt;
	&lt;li&gt;David Mertz, &lt;cite&gt;Text Processing in Python&lt;/cite&gt;
[&lt;a href=&quot;http://dannyreviews.com/h/Text_Python.html&quot;&gt;Review by Danny Yee&lt;/a&gt;; &lt;a href=&quot;http://gnosis.cx/TPiP/&quot;&gt;full text
free online&lt;/a&gt; in ASCII.]
	&lt;li&gt;Suley Oliveira and David E. Stewart, &lt;cite&gt;Writing Scientific
Software: A Guide to Good Style&lt;/cite&gt; [&lt;a href=&quot;http://cambridge.org/0521675952&quot;&gt;Blurb&lt;/a&gt;]
	&lt;li&gt;John Ousterhout, &lt;cite&gt;Tcl and the Tk Toolkit&lt;/cite&gt;
	&lt;li&gt;Mark Pilgrim, &lt;cite&gt;Dive Into Python&lt;/cite&gt;
[&lt;a href=&quot;http://www.diveintopython.org/&quot;&gt;Full text free online&lt;/a&gt;, but I
bought the hardcopy anyway once I really started reading --- publishers take
note.]
	&lt;li&gt;Chris Raistrick et al., &lt;cite&gt;Model Driven Architecture with
Executable UML&lt;/cite&gt; [&lt;a href=&quot;http://cambridge.org/9780521537711&quot;&gt;Blurb&lt;/a&gt;.
If I understand this even close to correctly, this is something like compiling
an abstract model specification into executable code, which would be cool.
Of course I'd have to learn UML first...]
	&lt;li&gt;Casey Reas and Ben Fry, &lt;cite&gt;Processing: A Programming Handbook
for Visual Designers and Artists&lt;/cite&gt;
	&lt;li&gt;Mike Silver (ed.), &lt;cite&gt;Programming Cultures: Architecture, Art
and Science in the Age of Software Development&lt;/cite&gt;
	&lt;li&gt;Steve Skiena, &lt;cite&gt;The Algorithm Design Manual&lt;/cite&gt;
	&lt;li&gt;R. D. Tennent, &lt;cite&gt;Specifying Software: A Hands-on
Introduction&lt;/cite&gt; [&lt;a href=&quot;http://cambridge.org/9780521004015&quot;&gt;Blurb&lt;/a&gt;]
	&lt;li&gt;Greg Wilson, &lt;cite&gt;Beautiful Code: Leading Programmers
Explain How They Think&lt;/cite&gt;
	&lt;li&gt;Glynn Winskel, &lt;cite&gt;The Formal Semantics of Programming Languages:
An Introduction&lt;/cite&gt;
	&lt;/ul&gt;
</description>
  </item>
  </channel>
</rss>