Tail Recursion is a Brain Hack Not a Compiler Hack

A few months ago this last-in-a-thread-of-posts generated a lot of buzz. In it, the creator of the Python programming language shared his views about how tail-recursion does not belong in Python. The only problem with the post(s) was that he, admittedly, did not understand tail-recursion. This course of events, the blog posts, comments, and aftermath, were interesting in what they revealed:

  1. How one person can affect how so many think
  2. How tail-recursion is so misunderstood within the developer community

The first, of course, is the prerogative of any BDFL. It is sort of fascinating how the edict that he set forth is enough to convince thousands and thousands of Pythonistas that tail-recursion is flawed and unnecessary (that is power!). That is sad, but, it is a privilege of the role. The interesting part is the impact of never understanding tail-recursion (#2): it removes an entire style of abstraction from the developers toolbox.
Here are 3 works that explain that style:

  1. LAMBDA: The Ultimate Imperative
  2. LAMBDA: The Ultimate GOTO
  3. Automata via Macros

I haven’t found any other resources than those and Jon’s post here (see the last section) that touch upon the style. Do you know of any others?

The Difference Between Undergraduate and Graduate School

Today during lunch my friend told me that the difference between undergraduate school and graduate school is that in undergraduate school the teachers are responsible both for telling you what you need to know and teaching it to you, but in graduate school they are only responsible for the former.
What do you think?

Reinstalling Snow Leopard

To satisfy my own curiosity, I reinstalled OS X Snow Leopard today.
It took about 48m to install the OS. I excluded all printer drivers, foreign language fonts, and translations.
You can’t trust the estimated time to completion. It started by reporting only 17m. After 17m, it changed to 18m, at which point I quit watching. Returning later, it reported 5m remaining, and after 1m reported completion.
One reason for a faster installation, too, is that the installation media is not verified as it was in Leopard.
This was on a 2.0GHz Core2Duo Mini.

How Do You Compete for Your Own Job, or, Are You Really Learning?

A few days ago my friend and I were talking about the software development market and how as you pass multiples of 10 years of age you tend to face “new concerns” at work. For example, when you turn 30 you get promoted to lead developer, when you turn 40 you get promoted to manager, when you turn 50 you get to keep your job, and when you turn 60 you are asked to leave. This might be a regional occurrence; but it can’t really be that uncommon (Note: I am not in this situation, which I believe to be an exception to the norm).
In every case, said developer is always competing for his own job. What does it take to keep it? How many years does it take to be a good [insert language here] developer. Say it takes 4 years to get “good enough” at Java; what do you have up on a recent college grad with 4 years experience who is willing to work twice as hard for half the prices as you? Think about it from an employer’s perspective; what is the dollar amount that they would place on experience? The answer to that question largely depends on the employer and potential employee, and in particular the former’s needs and the latter’s negotiation skills.
Whatever the case, isn’t there a question lurking at the back of their mind as they read the resume of a developer with 12 years of Java experience, a question something like “If it takes 4 years to get really good at Java, what did you do with the other 8 years?”. While the 4 year number is totally arbitrary and there is a lot more that goes into being a good developer than just programming; I have wondered things like this about both myself and other developers. In that amount of time you could easily attain a degree in some related, interesting field that would add a lot to your repertoire of expertise.
Without too much effort; one could earn a masters degree by attending night school for about 4 years. That is only one class per semester. In retrospect, I could have earned a masters in English Literature two times over by now, yet I have not. Who does this though? It is not considered to be normal; or maybe I am hanging out with the wrong crowd?
Perhaps it is too expensive to justify in terms of dollars or time? I guess I am just left wondering, what have I really been learning? Has it been of any significance? Has it been challenging and truly beneficial? How many programming languages do I need to learn until I have gotten the 80% that I really need?
How would the world look if we were expected to learn something significantly new every 4-8 years? I think that it would look very, very interesting.
What are you doing with your time? Are you challenging your brain? Are you really learning something new and challenging, or is it just more of the same?

Why the iPhone Can Be a Hard Sell

In order to purchase an iPhone in the USA you need to sign up for a 2 year contract with a cellular phone vendor. That seems like a relatively fair deal: Apple gets their money, the cell phone vendor gets their money, and you get an iPhone. Part of the deal is that the phone is locked to this particular cell phone vendor; this means that if you want to put a SIM card in the phone and actually make calls with it, then it will only work with this one vendor. This seems unfair but it is still acceptable; Apple makes the rules and we play by them. There is one more catch, though; the only way that you can ever upgrade the software on your iPhone is if you have an active SIM card with the cell phone vendor.
The implication here is that if you want to keep using your iPhone past the two year contract, where using it means keeping it up to date with the most current operating system, then you must continue your contract with said cell phone vendor! This is unacceptable. You might wonder why you would bother to keep using your iPhone after the contract expires, and you should. Well there are two very good reasons:

  1. You bought a new model if iPhone and you want to use your old one for music only (or perhaps your spouse/partner/children/friends want to use it).
  2. You are using your old phone for development purposes.

Ideally, the iPhone device would function like most other computers and allow you to install future software updates on them without interference. Even if it were locked down to Apple software only that would be totally acceptable. The current model really makes me cringe when I think about the money you would have to waste just to use a 2 year old device; I guess this explains why so many old iPhones are always up for sale on the sales boards. One other thing to note, if said cell phone vendor is teleported off of the Earth by aliens, then you are left with a multi-thousand dollar cell phone that will not work; since it only works with said vendor. Of course, Apple would have to deal with this, but what if Apple is teleported off of the Earth? Again, you are left with a useless multi-thousand dollar cell phone that will not work. What a rip off.
The reason why the iPhone can be a hard sell is that despite the fact that they are selling it; you can never really buy it. It is really a leased device; if you want to maintain it you need a cell phone contract. Fortunately for us there is an amazing device that is just as powerful; the iPod Touch!
Note: People report that you can “activate” your phone using any active SIM car from said vendor; but this is not stated anywhere officially and can’t be counted on in the future.
Note: Here is an excerpt from a conversation I had with the cell phone vendor’s support where I was trying to learn more about how the iPhone works with them.

Grant: If AT&T goes out of business, I would be left with a cell phone
that I could not use right?
Rhonda: Apple and [vendor] have an agreement to have [vendor] be the exclusive
carrier for their device. If something should happen to [vendor] and we no
longer provide service, I am sure that Apple would move the devices to
a carrier who would. I can not see that happening but I am sure it
would be worked out.
Grant: What if Apple goes out of business?
Rhonda: Currently the iPhone is programmed for use with [vendor]. The
iPhone software is updated and maintained thru iTunes so I would not
be concerned about having a device that couldn't be used.
---
Grant: Re #3, I am confused about what it means to use and activate
and update the device and stuff.
Rhonda: The iPhone does not function without Active service.

What Would You Have Said?

On my last project we had a lot of meetings that included “fluff”. This is not unique, especially in IT. What was different, though, was that every lead developer was expected to perform three-letter-acronym loaded monologues, nearly on a daily basis. On one particular afternoon I felt like I had really gone overboard. While the subject matter gave me little leeway in the speech that I could craft; I still I could barely believe what I had said, and wondered if anyone else felt the same way. I decided to ask one of my friends in the same meeting what he thought, over IM. Here is the conversation that followed:

Me: did you think that was absurd what I said?
Him: sorry, but kind of 🙂
Me: OK
Me: what would you have said?
Him: same thing 😀
Me: (rofl) I KNEW IT

A List of Wisconsin iPhone Developer Blogs

Are you blogging about iPhone development in Wisconsin? If you are, I would love to add your blog to my list of Wisconsin iPhone developer blogs. Currently there is only one on my list. I know there are folks out there, though, as evidenced by Madison Cocoa Developers and Midwest iPhone SDK Developers.

Wisconsin iPhone Developer Blogs