home
on exploration, introspection and creation

Archive for July, 2009

Life Hack #3: Do Puzzles

Wednesday, July 22nd, 2009

A lot of us don’t challenge our brains enough. Doing so will keep you healthy and ensure sharpness of mind.

Two specific puzzles I recommend are: Brain Challenge (the iPhone version is actually pretty good, with a diverse selection of puzzles, barring a couple of really annoying games) and The New York Times Crossword. I’m not particularly good at the latter, but hopefully persistence will allow me to get better, and–who knows–maybe one day I’ll solve a Saturday puzzle (which is, by the way, the hardest in the week).

Life Hack #2: Even better than audiobooks: Podcasts!

Monday, July 20th, 2009

I’ve been listening a lot to audiobooks on my way to work, and in the gym. While they are a great way to catch up on some items in your reading queue, I felt that there were many books that I didn’t get that much value from (perhaps it was the collection; I’ve been listening mainly to nineteenth Century classics from www.librivox.org).

Today I tried to listen to some podcasts and immediate fell in love with this new way of using time efficiently. Specifically I recommend PRI’s podcasts that you can find on iTunes U. They are free, and they are a great way to learn something new. Today, for instance, I listened to the history of Barbie, Charlie Chaplin’s “The Tramp” and Kind of Blue. This made my bike ride very enjoyable.

I feel that I can concentrate more on a nugget of information presented by journalists than on lengthy prose (I just finished Uncle Tom’s Cabin… it was a journey). Try it.

That funny feeling (part I)

Saturday, July 18th, 2009

Every so often I get that funny feeling… it’s hard to describe, it’s stronger than goosebumps but I guess it’s in the same category of feelings.

It occurs as a result of me having heard someone say something that strikes me as deep, nostalgia-inducing, impressive, or something that makes me proud or happy. Most often it comes when I hear about an important historical event and its ramifications on the successive generations. It’s a weird, eye-watering feeling that permeates my body, and it usually lasts for a few seconds.

Software engineering versus civil engineering

Friday, July 17th, 2009

A couple of years ago I’ve had the pleasure to work with somebody who didn’t know anything about technology but was an incredibly smart and ambitious person. He had majored in civil engineering in college and through his struggles with some basic software engineering concepts I’ve learned a lot about the nature of programming and software engineering.

There was one question that made a particularly strong impression on me. He couldn’t understand why developers couldn’t write bugfree software. He likened software engineeing to civil engineering: when you build a bridge you can ensure there will be no defects (provided that the posted weight limits are observed).

This agreed with my intuition- one of the biggest problem I’ve seen with software is how low its service offering is. The expectations on software are really low- people generally accept the fact that software is buggy. Windows, or Excel may crash several times a day and we’ve pretty much gotten used to that fact. In contrast, cars don’t spontaneously explode; buildings don’t collapse; food doesn’t arrive mouldy in a restaurant.

Then I gave it some thought. For one, non-software engineering cannot guarantee bugfree products- the defect rate may be lower, perhaps even much lower, but not zero. There are unanticipated scenarios under which a bridge, no matter how carefully engineered and constructed, may collapse.

Still, there is no question that the defect rate in software is orders of magnitude higher than that in other branches of engineering. I think a primary reason why this is the case is, unfortunately, intrinsic to the field. There are orders of magnitude more inputs to consider when constructing spreadsheet software than when constructing a bridge. More importantly, software engineering relies on many more layers of abstraction to work correctly (which is what makes software engineering so efficient; you can’t build a bridge, no matter how simple, in a day). Each one of these layers of abstraction may fail, many more than when building a bridge.

That said, there are (albeit second-order) factors that can be mitigated, and I expect them to. Software engineering, regardless of how advanced it seems to be, is still incredibly immature- people have been building bridges for thousands of years, and writing software for fifty. As new languages, new paradigms emerge, we should expect software to be less buggy. Another reason, however, is a bad practice (I may be biased, but I strongly feel it’s been propagated by the likes of Microsoft and- lately- Apple). Users should not have such low expectations of software, no matter how complicated a job it seems to do. It’s this kind of complacency that leads to software makers tolerating higher and higher percentage of tech debt in their products (which is why I’m exceedingly excited by Apple’s move to essentially work on tech debt in Snow Leopard; the fact that Apple charges four times less for Snow Leopard than it did for Leopard shows how numb people have gotten to bugs in software.

Conversely, due to its complexity, software engineering has had to work out a bag of tricks that I think civil engineering should adopt (the automotive industry has adopted the “agile” approach of software engineering, with the Toyota lean manufacturing model, for example). Unit testing comes to mind naturally, but it would be interesting to see continuous integration (in a process where assembly is a relatively cheap process, relative to development).

In brief, software engineering and civil engineering have more in common than people think. Both can learn from one another, though the former needs to catch up more.

What is elevenseconds?

Thursday, July 16th, 2009

Perhaps it has something to do with this.

The World at Our Feet

Wednesday, July 15th, 2009

As we climb the ladder of education, and especially in college, we think that the world is at our feet. When we graduate and get a job, we forget about these aspirations and instead start thinking very small (for example, replacing the goal of fighting world hunger with the goal of getting a car). And while in college we are naïve and overreach, later in life we underachieve.

Why we do that is still unclear to me; I think it has to do with a sense of complacency that being a grown-up brings with it; or us being hyperpragmatic since by the nature of most jobs they don’t require us to think so we use our “mind cache” all the time.

Let’s think big. The world is still at our feet. As my friend A.M. said, we need to shift our thinking from “I want to do everything, but I can’t do anything” to “I can do anything, but not everything I want”. For most of our desires are reasonable and at least some are achievable within our lifetimes. We just need to start thinking.

What is and what is not meta

Tuesday, July 14th, 2009

There was a period in my life that was clearly marked by my exuberant fascination with everything meta. Now I treat it as a remarkable but not indispensable concept. I remembered it after a post in Coding Horror with some (really unjustified) hate for all things meta.

The concept is too simple to make an entire blog themed after it, I think, so the blog died but I’d like to cite one post I submitted there that explains my view on various ideas in the space and disambiguates them from meta proper:

From metayada (specifically, this post):

meta

One can think of meta as a function that takes an object and returns an object that describes the input object using the technique characeristic of the object itself. MP3 metadata, for example, is data about the mp3 file, but not the audio itself (for example, artist information, album cover picture, etc.). It’s meta because, just like the mp3 file is described by data (sets of bits), the metadata is described by the same means.

In real-life meta is shorthand for a situation in which instead of the object, the focus is on the description of the object that shares the same characteristics as the object itself. For example, suppose we are documenting the goals of our projects. One project’s goal could be to understand the relationships between customers’ preferences and their purchasing power. Another project’s goal could be to determine all players in the currency exchange market. If we step back, we might want to determine what’s the goal of us documenting all those goals. This is a meta goal. It doesn’t refer to the object itself (documenting the goals) but it describes it, and uses the same technique (determining the goal).

It is crucial to understand that sharing the characteristic of the underlying object is a necessary condition. In the example above, for example, we could do many things with the given collection of goals to describe it — we could determine their number, for example, or figure out that they all take just one sentence. But it’s the fact that we’re determining the goal of writing up those goals that makes the situation meta.

Not everything can be metafied, but I claim that once it’s been metafied, it can then be metafied ad infinitum.

self-reference

This is most often confused with meta. If something refers to an instance of itself (either a different instance or the same), then it’s self-referential. For example, if you’re playing an RPG game and your character instantiates an RPG game, then you’re using self-reference. Self-reference is often used to provide paradoxes: for example, take the following statement: “There are two misteaks in this sentence.” There is only one mistake in this sentence, but the fact that the sentence failed to provide an accurate count of the number of mistakes is a mistake in itself — so there are two mistakes in the sentence. Which means that the sentence only contains one mistake. But then… (ad inf.) The sentence is self-referential. Self-referential statements can cause infinite loops (but iterative, not recursive infinite loops), like in the example above.

recursion

Recursion is a special case of self-reference when the object invokes a new instance of itself rather than refer to itself. The sentence in the above case is not recursive because it does not invoke a new instance. Similarly, a piece of code that does recursion is itself not recursive: it’s, however, still self-referential. An example of a recursive statement is “n factorial is n times larger than n-1 factorial”. This is recursive: to determine what 5 factorial is, you have to instantiate this sentence multiple times. In the mistakes example above, you don’t need to instantiate multiple copies of the sentence.

reflection

Reflection is the ability to inspect one’s own definition. Reflection is a special case of meta.

reflexivity

An operation is reflexive if it operates on itself. This is not really self-referential (is the statement “my dog is cleaning himself” self-referential?).

self-relativity

It seems to be that self-relativity is the ability to relate to oneself. A simplest example of self-relativity is the word “I”. If something is self-relative, it is capable of producing self-referential statements.

deep

A lot of things in the world are just deep. They’re not meta or self-referential. We like talking about them because they seem complex. That doesn’t make them any less sophisticated or interesting, but a distinction must be made. An example of something that’s not really meta or self-referential is the barber paradox:

“There’s a barber in the town that shaves everyone who doesn’t shave himself. Who shaves the barber?”. This is paradoxical because if the barber shaves himself, then by the first statement, the barber cannot does not shave himself. If the barber doesn’t shave himself, then by the first statement he shaves himself.

Actually, this is not really a paradox — there is a flaw in how the first statement is constructed. Let S(i) be a function that assigns to every person i a person that shaves them. Then S(i)=b ^ S(i)=i encodes the first statement. It is meant to be a tautology (since the statement describes something about this hypothetical world that’s supposed to be true for everyone in the town). But if we substitute b for i, we get S(b)=b ^ S(b)=b which is false. Hence the first statement cannot be a description of the world. In other words, it is impossible for the barber to shave everyone who doesn’t shave himself. It’s a little like saying, “The square root of every integer is an integer. What is the square root of 2?” and claiming it’s a paradox. In actuality, the first statement is simply false.

In any case, this is not really self-referential; it’s just deep. The fact that the barber shaves himself isn’t self-referential, but “shaving” becomes reflexive when it’s applied to the barber.

Sixty Symbols

Monday, July 13th, 2009

www.sixtysymbols.com is a website that features videos about the symbols of Physics and Astronomy. The presenters try to carefully walk the line between material that’s too popular-science-y, and too jargon-y, but most times they err on the side of the former.

Still, it’s interesting to see the videos explains concepts in Physics and Astronomy by starting at the definition of the symbol and branching out and talking about things relevant to the symbol.

[source: gizmodo]

Fortune cookies and messages in chocolate wrappers

Sunday, July 12th, 2009

Have you noticed how these fortune cookies rarely contain fortunes these days? Often you’ll get six randomly (often poorly!) generated numbers, a Chinese word or phrase, and an adage. An adage! I want a fortune, something I can look forward to, not something that’s true for everyone!

Speaking of messages, I am also strongly opposed to those messages hidden inside the individually wrapped Dove chocolates. The messages are inappropriate, tacky (“Eating chocolate is like giving yourself a big hug”), generic (“Live your dreams”), and they encourage to do unhealthy things (“Have chocolate before bed to sweeten your dreams”).

At least I can make my own.

High heels

Saturday, July 11th, 2009

Perhaps I’m in no position to argue this, but I think our society should banish high heels.

It seems to me just another example of a relic that for some reason has stuck around. High heels are uncomfortable, unhealthy, and dangerous (think those subway vents on the walkway!).