Normal Thoughts, Nerd Thoughts

Written on 2009-02-01 00:18:46
I'm going to try to keep this short. Top 5 things that have been stuck in my head the last 2 days.

1: Actually, 1 hasn't been stuck in my head it's a few interesting news bits from this morning. One being an interesting interview and look at Middle East policy with Obama, the other being Jessica Alba calling out Bill O'Reilly on WWII neutrality. I normally wouldn't post the latter sort of junk but I found it pretty funny for one reason or another.

2: Amon Tobin is awesome. Literally, awesome. My favorite two albums of his are Supermodified and Permutation but I can't choose between those two. Seriously though, just listen to Nightlife off of Permutation or Slowly off of Supermodified. Listen to those for me. Please. Tell me they're not masterfully composed or beautiful. It's all sample-based. He's staggering.

3: I'm going to be moving by the end of may. I need to save up for a down payment on an apartment (with Teresa) somewhere nearby and public transit accessible. I may also change internet service providers. If I do that, does it make sense to buy hosting from someone (I'd definitely choose a Linode 360 in Atlanta at $20/month)? I'd still keep a server at home for, uh..."file transfer operations", media serving and SSH access or some such. I just don't want to have to run off of it for bandwidth and downtime reasons.

**Computer Nerd warning: I think what follows may be the most concise explanation of what really interests me in Computer Science that I've written, namely item 5. Item 4 is prerequisites, sort of. If you want to understand some of the reasons I'm into computing and the questions that interest me you could do worse than read what follows. Note that I think Computer Science is generally one of the most interesting fields that exists because it lets you study anything: Games, AI (Psychology/Philosophy/Ontology/Nature of intelligence), Theory of Computation (Mathematical Foundations of Logic), User Interface Design/HCI (Psychology/Aesthetics/Usability), Programming Languages (Linguistics). etc...but what follows are my personal reasons, not general ones.**

4: I posted this reddit thread yesterday but the topics debated are so interesting to me I'm going to post it again. Consequently, I've spent this morning peeking at things like this, and a lot of the work Jonathan Shapiro has been doing over the last few years, particularly BitC and Coyotos. I came into programming last year excited about my understanding that to support the trend towards parallelism we had to rework something significant on at least one of the following levels {Computer Architecture, Operating Systems, Programming Languages}.

I also understood that the field had a lot of lovely innovations which (debatably) never conquered the mainstream such as Lisp, Unix on one side, Plan 9 on the other, RISC architectures, etc. One always has to struggle with Worse is Better. Note that I did say debatably, Lisp/Scheme increasingly influence recent languages, Unix is slowly working towards the consumer market through OS X and Linux and has always been strong in Industry, Plan 9...well...[pdf warning]Rob Pike has some interesting words[\pdf], and Intel's x86 chips apparently hardware translate the CISC ISA down to some sort of RISC-like micro-ops.

The point is the solutions which were elegant or "technologically superior" did not tend to be the ones favored by the market for various reasons. Note that I am not saying we all should be using Lisp Machines. These technologies were beaten in the market for good reasons but that doesn't mean they were a direction we shouldn't pursue. Consequently, I am beginning to understand that because the foundations of this industry which has taken over the world since 1970 are in many ways fundamentally unsound that we should harbor a desire to eventually rework those foundations. Namely by the insertion of abstractions to aid the modern programmer in issues of parallelism and secure and reliable code.

5: I guess the question that really gets me is, "Where should all this abstraction be?". That is, what are the right layers in which to have the abstractions we settle upon? I think a number of things suggest that the Computer Architecture and Operating System layers are not the correct ones and that the abstractions should wind up in our Programming Languages. Backwards compatibility and the price-performance competition with existing industry being the principle obstacles to Architecture and Operating Systems. Of course, once you've figured out where the abstraction should be you have to move on to "How do we create these abstractions and put them in their place?" or the question of implementation which is for all intents and purposes much harder. This has taken way too long to write and I'm pretty spent at the moment. Hopefully, I'll get a chance to flesh out these ideas later.

**/end nerdery**

PS: It's begun. Mike Miller was right. I'm doomed to be a Computer Historian...
comments powered by Disqus

Unless otherwise credited all material Creative Commons License by Brit Butler