My Bookshelf

I get asked from time to time what I read. Here is what my current bookshelf looks like.

I recently finished these:
Confronting Reality: Doing What Matters to Get Things Right
The Life of Pi
In the Line of Fire: How to Handle Tough Questions…When It Counts
I Am Legend

I am currently reading these:
The Peopleware Papers: Notes on the Human Side of Software
Principle-centered Leadership
Code Complete: A Practical Handbook of Software Construction

I have these lying in wait:
Java Concurrency in Practice
The Algorithm Design Manual
A Beginner’s Guide to Discrete Mathematics
The Age of Turbulence: Adventures in a New World

I plan on buying these but want to finish what I have first:
Getting to Yes: Negotiating Agreement Without Giving In
The Toyota Way
Facts and Fallacies of Software Engineering (Agile Software Development)
Peopleware: Productive Projects and Teams


Learn To Juggle

Over the years interns, junior engineers, aspiring programmers, and CS students have asked me what they can do to get better. I usually recommend some books that will help shift their thinking to the next level and try to direct them towards topics that interest them, such as GoF if they aspire to be an architect. There are a number of books I usually recommend, such as Effective Java. I was thinking about this question a bit this morning during my commute and concluded that there is a higher level to this answer than what I have been providing and it is industry agnostic. Learn to juggle.

I’ve found over the years that as my life and career has progressed that I have more of a need to be able to juggle many different aspects of my life, without forgetting or dropping any of them. There are a few distinctions when juggling. You can juggle small objects, large objects, or a combination of the two. Small objects are the light weight ones that are fairly easy to hold, catch, and throw and are thus not extremely important in contributing towards long term goals. Large objects are heavy, bowling ball like objects, that are very important to one or more of your long term goals. The importance of the object to long term goals is always going to be directly proportional to the size of the object. Considering this, the smallest object will always be the least important while the largest object will always be the most important.

The size of the objects may change over time. For example, early on family may not even be one of the objects however, as in my case, I found myself with a small object labeled “Girlfriend”. This object grew over time and became a large object labeled “Family”. This object has now grown to be the biggest and is thus the most important. Likewise, some objects may shrink or eventually drop off. For a long time the object labeled “Surfing” was my biggest but slowly shrank and eventually fell off all together.

When juggling there is always a threshold before things start hitting the ground. This threshold will differ from person to person and will vary depending on the type and number of objects being juggled. In addition, this threshold can be changed and will typically not require the number of objects in the air to be taken into account so much as the total weight of the objects. For example, if my threshold is 20 and I have 20 objects all valued at 1 then I am at my threshold. However, if I have only two objects, one valued at 20 and one valued at 1, I am over my threshold and something must give.

It is important to note here that there will always be some objects that are, in themselves, over our personal thresholds. These are items that we will likely be able to achieve, given time, but that we will have to drop all other things and get a lot of support for. For example, I theoretically could be the Mayor of my town. However, I don’t know much about the job, don’t have a political background, don’t have funding, and really don’t have a large constituent base. This doesn’t mean that I couldn’t do it but simply that the object is larger than my threshold so to even attempt such a large undertaking I’d need to drop the value of all other objects.

heavy-1.png
My juggling until last week when school dropped out (Original image borrowed from here)

I have taken the time to value my objects, though I have never actually assigned them numbers. For example, my “Family” object is the biggest, followed by career, and so forth. Understanding the ordering of your objects is the first step to being able to juggle well. The main reason for this is that as some objects grow and others shrink you will inevitably find yourself with a need to drop some things off. Without understanding the importance hierarchy, how would you know what to drop?

Finally, understand when your threshold changes. A number of years ago I found that I could handle far less than I can today. There are a number of reasons why this threshold can shift. The reasons why are not as important as understanding that your threshold can shift and always being able to gauge where it currently lies. Just because you could juggle 15 large objects last week doesn’t mean you still can today.

So, if you want to excel at anything in life, learn to juggle.


CRAPTCHA

Just to make sure you are human please type the following phrase:

yahoo.jpg
Yahoo’s Captcha

google.jpg
Google’s Captcha

Unless you are blind. Then, if you are lucky, you can click here to hear a spoken version of the captcha. However, most sites don’t implement a version that offers a spoken word. Facebook, MySpace, and other social networking powerhouses currently only cater to the vision capable crowd.

While the use of captcha was originally quite effective in preventing the use of scripts to gain access to a particular function of an application, it is only a matter of time before the script loses its effectiveness due to hacks. Both Yahoo and Google’s captchas have been hacked (click their captcha above to link to the articles talking about them being hacked).

Captchas are painful for all users, not just the visually impaired. I recently set up a phpBB bulletin board and watched someone try to sign up only to find that they had to enter the captcha over 10 times, all of which I verified to be correct, before it finally worked. This is just one of many examples – I have been at countless sites where I had to enter the characters multiple times just to get an acceptance. There are some versions of captcha that provide an additional use, such as the reCaptcha project that uses user inputs to help digitize scanned copies of old books, but the pain for the user still exists.

A newer concept that has started to show up more and more is the challenge question. Sometimes this challenge will come in the form of something simple, such as, “Add the two numbers to the right (3, 18)”, then validates that you entered the correct numbers. Others, such as the one below, is quite simple to read and simply asks you to enter the letters from either the top or the bottom, presumably at random. Yet others I have seen show you a picture of a common object then ask for you to type what the object is.


IKEEN Blog
(In native Russian language)

Traditional captchas, simple language challenges (add 3 and 18), and other methods are increasingly obsolete as the repository of anti-captcha code grows. Breaking the security for any given application is simply a matter of having a large library of anti-captcha code and a rule set that defines when to try to apply each one.

So the question is, how do you prevent scripted access to applications without alienating users? If you came here for the answer you are going to be disappointed. I have some general ideas on how to help solve the problem but no ideas that I’d classify as a silver bullet. None are fleshed out enough to share here yet though. When they are you’ll hear them first. In the meantime, think about this problem and how to fix it. There are millions of brilliant minds out there and an answer is to be had. Its just a matter of one of those minds having a eureka moment.