It is said that when Hernando Cortes landed in the Yucatan with only 600 men to confront the full might of the Aztec empire he made the radical decision to burn the ships of his fleet, removing any possibility of retreat or return to home save by acquiring new ships as spoils of war. It's hard to overstate the motivation one experiences when failure is no longer an option and this is something I feel like I can say I've truly experienced in recent months.
The comfort and security of the familiar is like a warm campfire that lulls us to sleep. Then, later... perhaps much later, like the gunslinger in Stephen King's novels, we awaken to find the campfire has long since died out, we are much older than before, and lost in a strange new world.
But good or bad, change is the agent that restores our awareness. It brings color and vividness to our lives. It challenges us to grow, to become more than what we would be otherwise. As Frank Herbert wrote, "Without change something sleeps inside us and seldom awakens. The sleeper must awaken!" I believe the sleeper he was referring to is the mythical hero inside ourselves. It's the hero that Joseph Campbell wrote about. The hero that calls us on a journey away from the comfortable and familiar.
I feel like my own journey is beginning once again. No doubt there will be many adventures to come. I am truly thankful to all my friends. I hope you know who you are.
With that, I leave you with this song that to me evokes the spirit of the mythical hero.
Schiller - Night Flight
Today, my friends and I got to talking about the age of the human race under both Evolutionary and Biblical timelines. In particular there was the question of whether or not the roughly 6,000 years of Biblical history allow sufficient time for the human population to grow from 2 to approximately 7 billion. I was curious about this and did some back of the envelope calculations along with some SWAGs (emphasis on the 'WA').
For the population model I assumed that where is the current population, is the number of generations since Adam and Eve were banished from the garden, and is the average rate of children produced per parent that go on to produce children of their own. First, I assumed that would be something like 1.5, since people have historically had big families but things like war, plague, and famine substantially decrease the number of offspring that have children of their own. Finally, is the number of generations. Typing this into wolfram alpha as log(1.5, 7000000000) results in just under 56 generations which doesn't seem like that long. If one assumes that the average age of child birth is 25, then that results in 1,400 years. More than enough time to achieve the current population.
What if we take 25 and plug it into a model based on the Evolution timeline? According to wikipedia, the current iteration of humanity, also known as homo sapiens sapiens, has been around for about 200,000 years and that would mean about 8,000 generations. Although I haven't had any life sciences education since highschool, that seems like a plausible number of generations within which to achieve the ethnic diversity currently present in humanity. Anyway plugging these numbers back into our model, we want to solve , we can type 7000000000^(1/8000) into wolfram alpha giving us about 1.003.
This is an unsettlingly low number for , but it seems plausible to me. For centuries, life for people has been, as Thomas Hobbes used to say, "nasty, brutish, and short".
I will do my best to make future blog posts for the new year more cheerful :-).
This week the world lost Dennis Ritchie. I'm not going to try to eulogize this giant of Computer Science. Many other people have already done that, and besides, the man's work speaks for itself.
But it has made me interested in taking a new look at C. Over the past year, I've been using C++ on my graphics engine and the year before that I spent exploring Haskell. I've had mixed success with these. While they're both very nice languages it seems to me that for every problem each one of them solves, other problems are created. So I think I'm going to go back to C for a while and rewrite my vector and matrix math code in that language instead of C++ (or Haskell).
Much of my reasoning for this is based on Joel Spolsky's Law of Leaky Abstractions. It seems to me that while object oriented and functional programming abstractions can be very helpful, they can also be incredibly frustrating to deal with when something doesn't work and you have to go track down a bug. So I think a good case can be made for writing code that keeps as much practical information on the current line as possible - in other words code that is self documenting. And I think C might be a good way to do this. After all, sometimes less is more.