Reading Structure and Interpretation of Computer Programs and working through the exercises in Accelerated C++. C++ is certainly an improvement on C but Scheme makes it look like a supercharged assembly language.
Reading Structure and Interpretation of Computer Programs and working through the exercises in Accelerated C++. C++ is certainly an improvement on C but Scheme makes it look like a supercharged assembly language.
IT job market imploding. Interest in structural biology reviving. First sighting of Lisp in a bioinformatics job ad [This was at the EBI].
My first attempt to read Damian Conway's Exegesis 3 left me with a spinning head and serious doubts about Perl 6. Piers Cawley's Not just for Damians acknowledges that a lot of people feel the same way but makes a good case for the new features and inspired me to have another go at Exegesis 3. I liked what I found: the features discussed in the Exegesis have a distinctly functional flavour to them that will make it possible to write Perl code that is more concise but also more readable.
The O'Reilly book (in French) about O'Caml is online. I skimmed through it and was surprised to find I could follow it pretty well. This seems likes an interesting, if slightly unusual, way to brush up on my technical French. A volunteer project to translate it into English has completed about 70 % of the text.
A major design goal of Dylan is to produce a language in which complex programs can be rapidly prototyped in the same way as with dynamically-typed languages such as Smalltalk or Lisp or "scripting" languages, while at the same time enabling performance comparable to statically typed languages such as C or ML.
Spent half the afternoon tracking down a mysterious segfault caused by one little line:
static char *sort_phen1 = NULL,*sort_phen2 = NULL;
static int initialised = FALSE;
/* lots of code */
static int sort_comp_phen(Ind *s1, Ind *s2)
{
char *sort_phen1,*sort_phen2;}
if (!initialised){sort_phen1 = chrom_string();}
sort_phen2 = chrom_string();
initialised = TRUE;strcpy(sort_phen1,chrom_phenotype(s1->chrom)); strcpy(sort_phen2,chrom_phenotype(s2->chrom));
return strcmp(sort_phen1,sort_phen2);
Strange how you can never see something that's staring you in the face. Compiling with the -Wshadow flag would've caught it.
I'm not well prepared for this kind of stuff; looking at Mark De Pristo's notes on bioinformatics programming in Scheme reminds me just how little I know.
Paul Graham's article Beating the Averages is interesting. Lisp programmers (and functional programming advocates in general) have been saying this kind of thing for years. I suspect they're right but at this stage in my career, my job prospects depend on knowing the usual suspects (C/C++/Java/Perl). It's a pity because the idea of trying something different, especially something that would give me an advantage over the competition, appeals to me.
Working through the exercises in Accelerated C++. Eiffel may not be as concise as C++ but at least you can't make stupid mistakes like:
line = string('*',cols);
instead of
line = string(cols,'*');
Took me a while to spot that one.
I've come to the conclusion that I like languages to be concise; that's why I haven't given up Perl for Python or Ruby. Lately my Perl scripts have become exercises in using the least possible number of variables. I never loop over a list where map will do the job. If this continues, I'll end up coding in Haskell.
One thing I've thought would be useful is a way to interface Eiffel objects with a scripting language. Victor Putz has done it with epolyglot, a library that supports mixed-language programming in Eiffel, Python and Haskell.
New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.
Keep up with the latest Advogato features by reading the Advogato status blog.
If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!