This is just a quick link post. There may be one or two comments but I'll try to keep my mouth shut and I promise I won't ramble on like an idiot about language preferences. I know I don't write enough code.
Pixar is making another movie called Up and it's out at the end of May, God bless them. I am amazed by the consistent quality stuff they churn out and really can't wait. Trailer here. Watch it!
Also on the entertainment front, I think this is rendered and not real but I wish I could pay money to play it. I spent a large portion of my childhood playing Mega Man 2 so the idea of Mega Man 2.5D is positively awesome.
HLint: Personally, I wish every language had a library like this. Hi, let me suggest more idiomatic expressions of your code. Also, the Holumbus developer's blog made me very happy in just one sentence: "There’s no reason why Haskell can’t be used to build distributed systems, so let’s do it." Damn skippy, sir. Damn skippy.
Dreamsongs by Richard Gabriel: Mob Software. Every now and then I forget about Richard Gabriel. Then I stumble across his work and remember that he's a great thinker. I particularly enjoyed the section on The Changing Face of Software.
My favorite summary of ILC 2009 so far is Vladimir Sedach's, primarily because of the remarks on patch loading, the commentary around Sussman, and the link to Mob Software reminding me that, sure, parallelism is one problem but Amorphous Computing and long-lived systems provide a whole new bag of interesting problems to start working on. I remember stumbling onto Jacob Beal and Radhika Nagpal's pages a while back. Apparently it's also going by Spatial Computing now and there is a good presentation on it here. Also, who knew Pascal Costanza plays Magic? I might just have to go to one of these Lisp conferences after all. :)
Speaking of Sussman's comments, Jao Ortega has posted for the first time in almost a year on that very subject. He's gone into more depth on Sussman's talks than anyone else I've seen.
One last interesting point that I gathered that Vladimir made explicit from Shivers and Sussman is "that unspecified behaviour actually gave you more opportunity for expressive power" which makes me a little sad. I still haven't decided how I feel about formalism. I need to write more code first. Still, my initial reaction is not exactly positive.
Last but not least I've got to mention the work on Unladen-Swallow. The project (which has support from Google) is looking to create a branch of CPython which performs 5 times faster and get it upstream. They've already made a first release with some solid gains and I'll look forward to keeping an eye on them.
John Wiegley posted an article that I thought was fun a week or so back called "Hello Haskell, Goodbye Lisp". Naturally, it made it on Hackernews and Reddit and there were comments of all stripes. Whenever somebody posts an article about a language they're learning the initial reaction from some folks is "What an idiot. Implement something big and hard already!" and I think that is a bit obnoxious as well as missing the point. John Wiegley doesn't think he's a genius because he cracked Haskell's code. I think he knows that Haskell is a deep language and he's playing in the shallow end. What he (and many other people) are trying to figure out is which Programming Languages are equipped to deal with the future requirements of programming well and where the languages stand in terms of personal appeal.
Someone mentioned that Clojure would've been a more fair comparison for Haskell than Common Lisp and there's some truth to that. You'd think that Wiegley being a Lisp fan would cause him to lean towards Clojure but he really doesn't like the JVM for scripting. Why? He thinks it's startup times are unacceptable. I don't mind that but I'd be more concerned about the difficulty in producing standalone binaries and the reliance on having a JRE installed at all. It's just not my thing but that's what we're talking about here: preferences.
Different languages are suited to different domains. It's so bad I'm not even sure I believe in the phrase "general purpose languages" anymore. You've got the "server/enterprise" languages (Java,C#,etc), "scripting" languages (Python/Perl/Ruby generally, PHP/JS for web), "embedded" languages (Forth, C/C++, Lua), and then C and C++ again for Operating Systems, Compilers, "low level stuff" and real-time applications/games. Not that games don't often contain twice as much in the way of Lua\Python scripts as C++ core. *sigh*
So, let's be clear. You have to know several languages and the question is: Which languages do I use to be the most happy and efficient? I want my programming future to be fun! My thoughts are presently as follows. I'm not sure how many languages you can really hold in your head at one time. For regular, proficient (expert?) use I'd say I think 2-3 is about right and a half dozen is possible. I have a hard time imagining simultaneous mastery and regular use of 12 languages. I'm going to try to keep my list to 5 languages.
1. You have to be able to deal with C. You just do. It doesn't hurt to know assembly (ARM, 6502, x86, or whatever) but you have to be able to deal with C. If only to create bindings from other languages to C code. So deal. At least we now have a Low-Level and Embedded language covered that will give us the ability to work with lots of Open Source Software and older code. Also, I didn't choose C++ because I think C is simpler and cleaner. Obviously, there's a lot of C++ code around but trying to really know C++ has to be equivalent to really knowing 2 or 3 other languages. I'm skeptical. Again, preferences.
2. Python has lots of libraries, lots of existing code, and is reasonably readable and self-consistent. I think it serves as a good scripting language and can be used for web development fairly well (see: reddit). Plus it's actually employable and higher level than C.
3. I like Lisps. Don't ask me why, it's just a preference and I think they're fun. My priorities with a Lisp are being able to work with C code well, produce fast native code (preferably with some plan for multicore {futures,stm,threading solution,shared nothing message passing, etc), generate standalone executables and have a decent collection of libraries. That leaves me torn between SBCL (30MB hello-world?! I guess I could use CLISP but what about multicore performance?), Chicken Scheme (multicore performance again? they do have futures...) and Clojure (I need the JVM, you don't do standalone binaries, and there's no asdf/rubygems/cabal/chicken-setup/easy_install/anything?). *sigh* Oh, lisp.
4. Haskell does have some advantages. As far as I know it's the most "parallel-ready" programming language presently available. This is largely because it has solutions for the most granularities of parallel\concurrent code. And yes, I know parallelism and concurrency aren't the same thing...even though Wikipedia confuses them. Erlang, Scala and Clojure all have benefits but for various reasons Haskell is my pick of the lot. I'm open to that changing but it wouldn't hurt to know a lazy, bondage and disciple-style typed functional language regardless. It's an interesting way of thinking. Hackage is reasonably impressive considering the youth of the language in terms of mainstream use and Hayoo and Hoogle are quite unusual and cool methods for code search. The quality of the toolset is also impressive (GHC,Haddock,QuickCheck,Cabal,etc).
5. Factor. I'm not trying to be weird here, I'm just interested in knowing a concatenative language. The library support is pretty good. The code looks pretty clean. It produces standalone binaries which are both pretty small and pretty fast. I feel like a lot of smart design decisions have been made. I'm really interested in seeing where Factor goes. There are a considerable number of libraries given the number of people working on Factor and it's age. Hopefully, it'll only keep getting better.
So, what are my preferences stated more explicitly?
I prefer the late-binding/dynamic/whatever-the-hell-you-want-to-call-them languages like Lisp, Scheme, and Factor. They just make the development process more fun than anything else I've worked with. Clojure tempts me but the lack of standalone binaries, package management, and the requirement on the JVM makes me a little nauseous. I don't think Emacs is too heavyweight for text editing but I think that's too heavyweight. Sadly, these languages appear to me to be in the worst library position, save Clojure which is saved via Java. There's a lot of division of effort among the others and there always has been.
Haskell in emacs with ghci open in a shell isn't perfect but it isn't bad either and you do get all that type safety/power/relatively-painless-multicore-speedups. Plus the libraries and hayoo/hoogle, etc are pretty great.
As for C and Python, they're on the list so I can possibly be employed at some point as well as play in the codebases of my favorite Open Source Software.
I like High Level Languages and I like a lean towards functional programming. Haskell has been fun and I'm now interested in type systems that are actually nice to use but I would still run to a Lisp that made fast parallel code easily, even if it meant having some special typing constructs just for stateful behavior. Object Orientation was the hammer used to hit everything that looked like a nail for the last 20 years and while it unquestionably has it's place, I prefer the functional style in my personal experience where possible. That may well change when I start writing projects > 1000 LOC. Other than that, I just want a nice development environment and good libraries.
Before I forget, I should note that gaze made a very good comment worth keeping in mind on a recent reddit thread about programming languages which I'll try to sum up in a sentence or two: "The important part of a programming language is using it. You'll learn theory as you go, now write code." Anyway, I'm going to run away from social news sites for a bit and try to get some real work done.
It seems like a lot has happened in the past day or two. I'm all wrapped up preparing for a test tomorrow but there are other interesting things afoot. Teresa turned 20 today and there's going to be a party in her honor on Sunday. Kernel 2.6.29 has been released, it turns out cpufrequtils was never really doing anything and Skate 2 finally got a patch enabling custom soundtracks. EA Blackbox, even though you're two months late I'll take back some of those mean things I said. Speaking of games, someone finally wrote a Fei Long Guide for SFIV. It should hold some good lessons but I think I've got a lot of it down by this point.
I've got the webserver setup to play around with weblocks, leftparen and happstack. Hopefully one day I'll actually spend some time on that. It would be nice if weblocks was asdf-installable. I don't know. Maybe I'll just prototype GUIs in Chicken Scheme, Common Lisp and Python. QT seems to be the cross-platform GUI toolkit of choice. It's the only one with recent bindings for all three languages.
Oh, before I forget, if you're interested in the best general write-up on SSDs I've yet seen you should read this article from Anandtech. Generally I prefer the stuff at Arstechnica but I've yet to see anyone with an article this thorough and excellent on SSDs. Well done, guys. Speaking of which, OCZ Vertex 120GB are under $400. OCZ, you've earned my faith by this one. I'll choose you guys when I have cash to blow via pricegrabber.
There are endless good recipes on the Pioneer Woman's website. I had an abundance of Chicken, I check under Entrees->Chicken and find Braised Chicken and Parmesan Crusted Chicken. I've tried the Parmesan Crusted Chicken and the Braised Chicken. The Parmesan Crusted Chicken was pretty fantastic. Braised Chicken was tasty but I didn't like it as much.
The International Lisp Conference '09 has been going on and different people have said different things about it. Andy Wingo seems to have some decentwriteups. Sadly, some of the things he say make me think of what Paul Snively said in his Road To Lisp survey (which I realize is likely quite dated), "My own thinking is that Lisp is the cockroach of programming languages: it'll be the only one left after the apocalypse. Not bad for a dead language." Maybe in a few decades I can hope I don't suffer the bias of echo chambers. Maybe not.
Last but not least I'll just note that I'm really enjoying Elbow tonight while doing math. Really enjoying it.
Last thought, does anybody else wish there was a version of House for programmers in which "Dr. House" told everybody to just shove their Gang of Four and Design Patterns, think about the problem and actually do the job right? (Note: This does not mean unstructured programming or something. Mostly just anti-kneejerk-OO. He's a cynic looking for simple and obvious solutions, not a curmudgeon.)
I bombed a math quiz today. I mean, actually bombed. As in I think I got a zero. Guess it's time to go re-read the sections and redo the homework.
I wrote a poem recently about how progress is deceptive because it doesn't feel like progress. It feels like plodding along. But I was mostly just trying to convince myself. I don't think I really believe it.
I keep thinking to myself, "you've got a year or two to really excel. If you can't manage that, you'll be an average person. Forever." I have difficulty ascertaining whether or not my level of stress or ambition, for that matter, is appropriate.
Something I accidentally wrote on the bus ride home:
I never know why we put up with each other. The mystery of your flared temper or my sudden detachment. But we keep blowing along, buoyed by unseen currents and dancing in dwindling circles. I sometimes wish, might I cut the chase and stand in the center? But we are opposed magnets in a small room, unable to meet each other, unable to rest.
Hell with it. Here's some good sad bastard music just because.
I've done a very poor job adhering to my schedule today. I'm still in the spring break mentality and not really wanting to work. I worked hard Monday and Tuesday. I'm not sure what happened today. At any rate, I need to remember to make myself write some Lisp, Haskell, or Python for fun this weekend. I should also probably write some C# for school.
lib6502 by Ian Piumarta. I keep hearing that the 6502 had a really nice ISA and I'm considering whether an eventual fun project (like 5 or more years out) might be to write a basic lisp or scheme interpreter targeting the 6502. Maybe I could get away with working on it some in an Architecture or Programming Language Concepts course. Somehow it sounds tricky/crazy. Could I write one in 5 months? I'm still an idiot. Maybe I won't be in a year or so.
Last, there's some interesting guitar modeling software for PC...and articles about how to emulate other people's guitar setups, including John Mayer. Now, that may sound ridiculous...but here's something else that makes me happy that not many people know. John Mayer can play the everloving shit out of his guitar. There are a lot of little Stevie-isms in there. As in the late greatStevie Ray Vaughan, whom I dearly love. Is there anyone besides Mayer that's keeping the SRV style alive today that I should know about?
I'm still more interested in sampling than being a guitarist myself but I like to noodle now and again. Speaking of which, go back and listen to the first Gorillaz album. Great, right? :)
I've put myself in a rough position over the past few days. I should've been getting more math done but that's the past. I'm having a fair amount of trouble with inductive proofs but not because induction is tricky. Induction makes sense. Remembering how to transform equations with algebra is tricky and I'm quite rusty which makes it mostly frustrating and/or embarassing.
Anyway, there's a test on Thursday and I've got 5 sections of Homework problems to get through by then. Hopefully, if I can pull that off I won't do too poorly. I got an 89 or some such on the last test. I had some extra credit that bumped it up to an A.
I've been worried about my future a lot lately. I know that to some degree I went back to school just to know I'd be able to make money when I got out. In some ways, it was a move of desperation. In others, I thought it made sense to wrap up. Trying to teach yourself to code and working full time in IT wound up being a bit conflicting for me.
The important thing is I don't just want to make it. I don't want to just get out of school and be employable but I'm not learning enough or coding enough on my own to be more than that. So I'm looking at how to impose more structure and have more discipline to get more real coding done because this shortlog is just ridiculous, even though I did write a decent amount of Haskell over the break.
I want to see commitment and I want to see commits. I want to turn this guilt into motivation and that motivation into code. I can't say I love programming yet, I'm just fascinated by it...but I think if I keep at it one day I might get there.
PS: Listening to Gorillaz, their debut album. Definitely quality. Listening to Tim Hecker's new stuff. It's nice, particularly "Borderlands". A bit of Jaydiohead. It's nice. And Panda Bear...it's weirdly pleasant, particularly "Comfy in Nautica" and "Bros".
So spring break is finally here and I've gotten nothing done the past...5 days. I threw a small get together on Friday, went to a friend's stand up show on Saturday, saw the Watchmen on Sunday, and saw the same friend yesterday to watch Synecdoche, NY...which reminded me that I just don't get Charlie Kaufman films. The Kaufman films amaze me they're just incomprehensible. I can't infer the meaning to his metaphors, usually.
That's not all I've done these past few days but you get the picture. Worse (or better) still, my social schedule is booked. I'm already hanging out with people Tuesday night, Wednesday night, Friday night and Saturday night. It's ridiculous. I'm never going to get my math homework done. Anyway, where was I?
The more I think about it the more interested I am in writing or composing music of my own and there's no question that I want to do it digitally. I may even write my own software tools to do it but that's way down the line. A lot of the trouble is I don't know how to get started making music on a machine at all. Or off one. It's sort of this big, ominous thing for me. I don't think of myself as being that creative or talented anyway but I don't care. I'm going to try it. I'm still sampling things occasionally. I just need to find some piece of software to help me string it all together.
I've been at least a little productive. I've cranked through the first few chapters of Real World Haskell and would like to keep a one chapter a day pace. The code is browsable on the new server's mercurial repo. One good thing has occurred to me these past few days. Spring break isn't wildly different than my normal schedule. Sure, I don't have homework or Tuesday or Thursday classes but I don't think that's holding me back from being truly productive or learning things I want. If I just invent the right structure for myself I think I can do still more than I'm doing now. It's something worth thinking about.
After all, there's so much out there to study. I'm interested in picking up some Category Theory from a (djvu) copy of Conceptual Mathematics I found out on the interwebs. I'll probably buy a copy at some point, I have a problem when it comes to books. Anyway, aside from that there is tons of great free material out on the web. Herbert Wilf's Generatingfunctionology and A=B are both available free online and there is an interesting text on the Basic Concepts of Mathematics and one on Modern Algebra, and another on proofs that I may work on. Beyond that, there's tons offree material on Haskell and Lisp so I have no reason to be bored. Oh, and as always Brian and Robert over at Enfranchised Mind are always putting out goodarticles.
Last but not least, BT wrote the entire song that follows in the CSound programming language. Granted, it took him 6 months and hundreds of pages of code but still...
You, offworlder, your clangs and drones only return quizzical stares. And then I hear it, layers and patterns, a structure unfolds. And I begin to hear something warm and viscous like the wet earth. I was mistaken. You are one of us. Come in and make yourself at home.
Two quick complaints: EA Blackbox should literally go punch themselves in the crotch. The Community Center, Parkade, et al DLC for Skate 2 is embarrassing. Throwing a bunch of crap all over the place is not helping me, is not respecting or doing justice to the original and is not level design. Go screw yourselves and give me my five bucks back. All you want me for is my money. Dear Street Fighter IV shotos, particularly Ken scrubs, you all aggravate me. And bring out my larger issue with SFIV. I never failed to enjoy a fight in Smash Bros, even if I lost. Why is it that all the online matches are miserable, even the ones I win? I may have more to say about this and SFIV later. Just wanted to whine for now.
Two quick shout outs: Don Gerz is tearing it up with good poetry. See Flying and Lost Realities. Mmm mmm good. Been listening to really weird music lately. Abstract and ambient stuff. Particularly taken with Rivers of Sand by Fennesz. I like it, I think, but am also not entirely sure what to make of it. Am also enjoying Philip Jeck, Triosk, Tipper and Tim Hecker. Weird bunch. Should I go see Watchmen this weekend? I'm thinking yes. But when?
There are a bunch of links I want to dump out of my browser and I can't think of a coherent way to do so. Here we go:
The berrics has finally wrapped up. Unbelievably, I predicted Benny Fairfax's defeat of PJ Ladd. What a Long Shot. That match was awesome. Similarly the PJ Ladd vs Billy Marks match was damn fine. I feel a little robbed about Marc Johnson still but I made decent predictions.
Copyright is really going to struggle to figure out the 21st century and the consumer products it's bringing. Just check out this Ars Technica piece revolving around the kindle. New media is continuing to eat old media's face. (See: newspapers folding)
Miru Kim takes pictures of herself in abandoned industrial complexes and urban ruins. It's rather interesting and at the very least there are some good photos. She feels compelled to take them nude though so it's NSFW. She also gave a lecture about it. The Bennett School is interesting and the Catacombs and St Jacques are just crazy. I don't know what I think.
While we're on futurism I might as well mention that genetics is exploding and it won't be long before we're all seeing it. For the record, I do think we should be careful and concerned but if we take the right precautions I promise that synthetic biology will be flipping awesome. Also maybe solar power will close the gap at last. Go figure that the simple, elegant solutions are the right ones.
If you think Computer Architecture isn't in the middle of drastic upheaval for the first time in two decades, read this and then punch yourself in the face. Okay, so maybe that's not as indicative of the upheaval as it could be but I don't have a solid link explaining the shift to multicore architectures (probably) featuring simpler individual cores. Anyway, it's fairly interesting that the industry heavyweight (i.e. Monopoly) may have to completely reinvent itself depending on what the market does at this crucial juncture.
I know you readers care about multicore support in Programming Languages. Neat GHC mutterings in a new paper. Can we expect GHC 6.12 in the next few months? While we're on Haskell, I thought that this library to automatically generate typesafe bindings to C code was pretty f-in awesome. If we have to deal with the legacy of C code, this should help tons. Hackage gets more useful by the day. Other papers? You got it. Lambda the Ultimate helped me stumble on this interesting approach to Compiler Optimization from some smart doctorate seeker named Ross Tate.
A while back an article called Hard Work and Practice in Programming got posted to both hackernews and the programming reddit and generated a lot of comments. It was both discouraging and motivating at the same time. I'm afraid of all the work I'd have to do to know all I want to know but I'm slowly moving in the right direction. That's actually what's been distracting me lately and what the title of this post is about. I want to be ahead of the curve and able to deal with parallelism. There are few programming languages in which that's even possible and that'll only become more pronounced and important in the coming years. Moreover, I know that whatever I end up doing with programming the language I write code in makes a difference to me in how much I enjoy it.
Some languages I like more than others, some paradigms feel more productive or sensible to me than others. Unfortunately, my tastes lean towards the esoteric which means that to work professionally in the languages I like it might require a Phd unless the market starts adopting them pretty quick. Or at least a Masters. There's a lot of mathematics involved and I could stand to brush up on my Calculus as it is. Ah, well. I really just need to shoot a sheepish e-mail to Don Stewart or Bryan O'Sullivan asking what I can do beyond getting my BS and writing Haskell and Lisp to be prepared to get jobs at a place like Galois.
Then again, I think part of my concern is that while getting a job writing High Assurance would at least be fun, challenging and use Haskell, I'm not sure my passion is in somebody else's software. On the other hand, I haven't figured out what I want software to do for me yet. Hopefully working through the BS will point to some ideas. I still have the idea of a social network for self-schooling or autodidacts lingering in the back of my head. School's fine but I've always wanted a bit more flexibility than I've been able to get at the institutions I've attended.
Speaking of the math involved, I've been harboring an interest in Category Theory lately due to Haskell and I really enjoyed this man's story. I may be a theory learner myself. I definitely appreciate working through the abstract in SICP a lot more than working through some arbitrary example in CS class. Anyway, there's more to gather from this and maybe with a bit of work I'll actually be able to tackle Herstein's Topics in Algebra. It's been calling my name for a little while. Well, more later. I've got a midterm to finish.