Friday, January 01, 2010

New Year's Resolutions

One of my New Year's resolutions is to do more "public" writing in 2010.
As it is, I do a lot of "private" writing in the form of coursework, exams, slides, reports for grants, grant writing, thousands of emails, consulting, etc., and only a moderate amount of "public" writing like public reports, peer-reviewed papers, software manuals, web pages, and an occasional blog post. I have tried (and succeeded in?) drafting my friend and colleague Dan Zimmerman into this task, proposing that we each write or edit at least 1,000 public words per day. Every day I do not reach this goal I have promised to donate 1,000 cents (i.e., $10) to the GOP. As you can imagine, this punishment is very motivating.
Up until about 2007, I used to learn a new programming language every few months. Consequently, I now know something between 40 and 50 languages. I want to reboot that effort, as 2008 and 2009 were exciting years for new programming languages. (In recent years my attention has been more focused on revision control systems, higher-order and first-order theorem provers, and new logics.)
To "know" a language means that I: (1) can read it immediately, (2) have written at least several lines of non-trivial code in the language and, (3) after a few hours refreshing myself, if I have not written a program in a language for several years, I can write arbitrary programs in the language.
The high-profile languages that are at the top of my queue are Clojure, Go, Haskell, and Scala. I can read all four, but have never written programs in any of them. I also know quite a bit of the theory behind each language, and have reviewed research papers using them, but I need to bury myself in them for a few weeks to really get my money's-worth.
Performing a search on "programming," "language," and "compiler" in MacPorts also reveals a whole bevy of languages and compilers that I do not "know": arc, argh!, aspectj, bc, boo, clojure, cyclone, gdc/d-mode, embryo, erlang, ferite, ficl, fsharp, gforth, gnudatalanguage, gri, groovy, guile, ici, icon, Io, jekyll, logtalk, lua, mawk, mercury, mozart, ncarg, nesc, nice, nu, Omega, oorexx, pike, pure, q, qore, R, rb-kwartz, rexx, scala, shakespeare, slang, snobol4, squirrel, strategoxt, xotcl, yabasic, 4th, bf2c, cm3, distcc, gpc34, gprolog, gwydion-dylan, ikiwiki, inform, mono-basic, newt0, nhc98, nqc, objc, pnet, ragel, swi-prolog, tom, vala, yap.
I have a special interest in the scientific programming languages like gri, ncarg, and R due to a grant proposal I am working on, so they will get earlier attention. Historic languages like Dylan, Erlang, Forth, Icon, and SNOBOL are also eye-catching. Languages that seem to often come up in online discussion like Cyclone, D, F#, Guile, Lua, and Pike are are prioritized. Finally, I use some of these systems regularly, like bc, but not to their full extent. If I can get
through half a dozen of these this year, I will be happy.
What will I do with these new languages? On thing I am debating is writing a minimal extended static checker using FreeBoogie for each in the language itself. Of course, there are many other projects constantly happening in my research group, so there are undoubtedly implementation opportunities there too.
I will report on my progress on these efforts in this blog. I will also be using this blog to reflect upon new theories, tools, and technologies that I come across this year.
After all, why not take a big move to a whole new university as an opportunity to reinvent oneself via self-reflection?



Post a Comment

<< Home