[ Content | View menu ]

Finding Uniqueness

Mark Mzyk July 1, 2009

I’m going to venture outside the realm of software and contemplate a different philosophical issue: what makes man unique?

It’s certainly an issue that has fascinated man for a long time.  Not being a philosophy major, I can’t rattle off the major minds who have contemplated this issue.  “I think, therefore I am” comes to mind, but Descartes wasn’t contemplating what made him unique, he was contemplating what he could know was real.

I’ve heard lots of reasons put forward for what makes man unique, although I don’t remember where I heard all of them.  Reasoning and logic is an oft cited argument for what makes man man.  It used to be that the ability to use tools was given as the uniqueness factor.  Language is another popular option.

Yet one by one, these have also been shown to be true in other animals, thereby robbing man of its uniqueness in these factors.  I’ll grant that language still holds out hope of proving to be a unique factor among humans, but it’s only going to do so by arguing in degrees, such as insisting that your dog isn’t human because he can’t speak French (Non, ce n’est pas vrai! your dog might argue).

No factor by itself leads to humanity’s uniqueness.  A combination of all factors, however, makes humans unique animals.  Reasoning, logic, tools, language, and all the rest of it combined serve to make humanity unique.  One trait doesn’t always make something special.  The combination of ordinary traits in a unique way can and does make something special.

To bring this back to the computing world: computers are nothing more than silicon and plastic and electricity and a myriad of other elements, particles, and pieces combined in a unique way.  Software only works because a set of bits was lined up in just the right way.  Put it all together one way and you have a Zune.  Another way and you find the iPhone.  Make a few different choices and you end up with something else.  Each is a whole greater than the sum of its parts.  You may argue that some are greater than others, but that’s beside the point.

You’re unique.  I’m sure you’ve been told this since the day you were born (if you’re in the Western world, anyway.  There are some cultures where one’s individuality isn’t held up as an ideal).  How are you unique?  You’re unique because of each choice you make, everyday.

A career is the sum of the choices you make everyday.

It’s a little step, each day.  It’s registering a domain name.  It’s putting up something about you on that domain.  It’s writing software.  It’s writing open source software and submitting it to github.  It’s meeting the killer deadline your boss set.  It’s telling your boss no.  It’s remember to enjoy nature for a moment.  It’s remembering to kiss your wife goodnight.

All of this relates.  It relates just as reasoning relates to tools, which relate to language.  The relationship might not be clear, but the threads are there.  It’s taking it one day at a time to make yourself ever more unique.  You need not worry about doing that one thing that will make you unique.  There isn’t one thing that makes you unique, just like there isn’t one think that makes man or makes the iPhone unique.  It’s the combination that makes everything unique.

Man didn’t appear in a day: he evolved over time.  The iPhone didn’t appear out of Steve Job’s head: it was designed over time.  So to, your uniqueness is crafted over time.  Start working today and tomorrow you’ll find yourself being singled out.  You’re unique now, but what future combination of your work will make others go wow?

I’m waiting to see.

General - 0 Comments


Language Design Philosophies

Mark Mzyk June 21, 2009

In a conversation with a coworker, we distilled several programming languages’ design philosophies down to a single sentence.

Here’s what we came up with:

Java: Protect the Developer From Themselves

Ruby: Be the Developer’s Language

Python: There is One True Way

PHP: eh

Do you agree? Disagree? What are the one sentence philosophies behind other languages that we didn’t touch on?

Languages - 2 Comments


Career 2.0

Mark Mzyk June 7, 2009

Career 2.0 is a book that was published earlier this year by Jared Richardson with Matthew Bass.  They also have an associated blog for the book.  The reason I’m mentioning Career 2.0 is because it’s a book I believe most software developers need to read.

Why?  The focus of the book is on writing and public speaking to further one’s career.  It’s relevant advice that will help every software developer improve in their career, for the simple reason that any one who can communicate well has a leg up on most of the population.

The best part of Career 2.0 isn’t the main part of the book, but one of the appendices.  It’s called “A Rogue’s Gallery”.  It is a collection of stories by various people in software development telling how they got to where they are today.  It’s a wealth of advice and insight that if expanded could make a book of its own.

Career 2.0 is a nice compliment to go with Chad Fowler’s just re-released book The Passionate Programmer (I read the first edition, the poorly named My Job Went To India).  Chad touches on topics such as how to develop your skills and market yourself.  Couple technical skills with being able to write and speak and you’ll find yourself in constant demand.  It’s the reason neither Chad nor Jared worry about looking for work.  You should listen to these guys.

As a bonus, also check out Derek Sivers’ (of CD Baby fame) ebook: How To Call Attention To Your Music.  It’s written with musicians in mind, but the advice is useful in general.  It tells you how to call attention to and promote yourself.

I hope you find all of these as insightful and helpful as I have.

Disclaimer: I was a reviewer for Career 2.0 and I am quoted in the book, but I receive no money from sales of the book.  Career 2.0 is printed using Lulu.com, my employer, so in that regard if you do purchase a copy you are helping to pay my salary.

General - 1 Comments


Redis and Ruby

Mark Mzyk June 2, 2009

At the May raleigh.rb meetup, Kevin Smith gave a talk on alternative databases, in which he covered CouchDB and Redis.

The talk convinced me that Redis would be the perfect database to underpin Get Encouraged.  Redis is a key-value pair database that is blazing fast: perfect for a small Twitter app that really only needs to store tweets.

Being rather new to the Ruby world, there are obstacles that are easy for others, but confound me, since I haven’t encountered them before.  One of these obstacles is that I don’t know the gem system very well, and there isn’t a gem for Redis that you can grab using gem install that I could find.  This meant I had to figure out how to install a Redis Ruby client library gem using code from github.  Since I figure there are others who are as baffled by this as I was, here are the steps you need to take to install Redis and the redis gem on your system, using the redis-rb library.

The first step is to download the redis-rb client library from github.  It is here:

http://github.com/ezmobius/redis-rb/tree/master

There are other Redis Ruby client libraries, but my directions pertain to redis-rb, since that is the one I used.  Why start with a Redis client library and not Redis itself?  Because the redis-rb library provides a rake task that will install Redis for you, although you can still install Redis without using the rake task if you so choose.

Once you’ve downloaded redis-rb, untar or unzip it, whatever the case may be, and cd into that directory.

Install the rspec gem, if you don’t already have it:

sudo gem install rspec

Now run the rake command to install Redis:

rake redis:install

This will install Redis to /usr/bin/.  The Redis configuration file, redis.conf will be in /etc/.  Redis can be started by running /usr/bin/redis-server.  You do not need to setup a configuration file, since Redis will just use its default one; however, there are options that are worth exploring in the conf file, so at some point open up /etc/redis.conf and take a look.

Next, redis-rb requires that you have dtach installed, if you don’t already:

rake dtach:install

This installs dtach to /usr/bin/.  You don’t have to do anything with dtach, it just needs to be present on your system so redis-rb can find it.

The final step is to make the redis-rb gem, so you can use it in your code.  It’s easy enough:

rake gem

That command will package up the redis-rb gem and put it in the folder pkg under the current directory.  If you cd into the pgk directory, you can then install the gem:

sudo gem install redis

Note: while the github repo is called redis-rb, the gem it creates is called redis.

You now have Redis installed on your system, along with the redis gem to enable your Ruby code to access Redis.  Here’s some trivial example code to help get you up and running (this example is based off of one in the redis-rb github repo, where you can find more examples):

require 'rubygems'
require 'redis'
r = Redis.new
r.delete('first_key') #clear it out, if it happens to be set
puts 'Set the key {first_key} to {hello world}'
r['first_key'] = 'hello world'
puts 'The value of {first_key} is:'
puts r['first_key']

Save this code to a file, then start Redis on your machine (/usr/bin/redis-server), run the code, and watch it do its magic.  Hope that helps you get started with Redis.  Enjoy.

Update 6/3/2009: Kevin has now posted his slides from his raleigh.rb presentation.  Find them here.

Programming - 0 Comments


Hypothetical Tools to Further NADD

Mark Mzyk May 31, 2009

Two ideas that would be helpful to have and would enable me to further enhance my NADD:

A screen in a screen feature for the browser.  This might already exist, and I just don’t know about it.  With this I could run a presentation down in the corner, watching it out of the corner of my eye. I could pay attention as I wanted to, while doing whatever else I wanted.  Duel screens solve this problem, but while I tend to have my laptop with me, I don’t usually carry an extra monitor.  Once rollup monitors are invented, that will solve this, but until then, window within a window would be nice.

For online presentations, why isn’t there a real time stream of comments that flow next to the presentation?  It would be a two column layout: presentation in one column, comments in the other.  The comments could function like a chat room, or they could be more Twitter like, it doesn’t really matter.  It would awesome to see what people think about the presentation as I watch, with the ability to respond and add my own comments.  Thought doesn’t stop once the people at the conference leave the talk.

If you want to take this concept a step further: give users the ability to add comments that show up at specific points during the talk.  If at the five minute mark the presenter is talking about compilers, let me see all the comments that people linked to that point in time.  All of these comments will likley be on the topic of compilers.  With this ability, the discussions around presentations would improve greatly.

General - 0 Comments