Anders Brownworth

Technology and Disruption

Wars are won before they are fought - Sun Tzu

Usually the playing field is not level making the outcome effectively predetermined. In business, usually the incumbents have the advantage. Disruption happens when something that was an advantage turns into a disadvantage, swapping the playing field in favor of a newcomer. Horace Dediu calls this "asymmetric competition" or ASYMCO.

Online Education: Cal Tech vs. Stanford Machine Learning Courses

I went through two Machine Learning courses on iTunesU, the Caltech Machine Learning course taught by Yaser Abu-Mostafa and the Stanford Machine Learning course by Andrew Ng. They almost couldn't have been more dissimilar in approach. Initially I started with Andrew Ng at Stanford. Immediately he jumped into the math surrounding machine learning and didn't divert much from the theory for the first few classes. I suppose some people might learn well by starting from the theory, but not me. I switched over to Yaser Abu-Mostafa's Caltech course. While still thankfully math heavy, he started firmly grounded with the reasons for why one approach might be a better choice than another using examples.

I think this represents a fundamental strength of online learning. I'm a huge fan of Stanford; I find most of their computer science classes on iTunesU fantastic. In fact, I learned iPhone development back in the early days by watching Stanford's CS193P, but the machine learning class wasn't ideal. Rather than be stuck with that, I could cherry-pick a better class for my learning style over at Cal Tech.

This reminds me of a Freekonomics story on online learning by Sanjoy Mahajan. There was a Stanford class done live with students at Stanford and an online audience. The total enrollment was around 16,000 students and of them about 200 were matriculating students at Stanford. 248 students got perfect scores in the course and none of them were Stanford students. Did this point to some fundamental lapse in the admissions process where these students were being overlooked? Were they not applying? Or did it have something to do with the other things happening around each of those students when they were taking the class? I imagine it is a bit of all of these reasons but most significantly, I think it has to do do with pace and fit which are things you can manage as an online student where you would have a much more difficult time physically attending the class. (that and the sample size of only 200 Stanford students)

I can stop the lecture whenever I want and go research a particular topic or even snag a 10 minute Khan Academy refresher on how to do matrix math whenever I need. I can also cherry pick the best course for my learning style even across institutional bounds if things aren't exactly the right fit. About the only benefit I won't get doing all of these classes over the years is institutional credit. I don't really care about that at this point, college credit has long since lost its impact on my ability to be hired. Credit doesn't motivate me to do these courses, interest in the content does.

I believe credit, which is more of a problem for younger learners, will be effectively solved in the next 5 to 10 years. Some system employers recognize will emerge, with or without institutional buy-in. What is not clear to me is what model will be the winner at this point. Will the colleges and universities get together and make a cross-institutional system that assigns something similar to a certificate of achievement or even a traditional degree, or does some third party accreditation system emerge which evaluates courses become respected? I don't know at this point but I am watching Stanford in particular. Watch Stanford president John Hennessy discuss this in an interview from All Things D back in June if you want some idea where this is headed.

What to do With Star Coders

I've been giving some though to what you do with star coders - those 10x - 100x people that are very valuable in any organization. The problem is there are no good measures for them. You know they are extremely high quality and productive by what they are able to accomplish but you can't put metrics around them. Counting lines of code doesn't work because good code can mean very few lines. Because they aren't generally quantifiable, I don't think corporations use them effectively. The corporate tendency is to put a few less capable coders around the star coders in hopes that they will bring everyone else up but what you end up doing is weighing the star coder down. His 10x when cut down to 2x might bring a 1x coder to 1.2x capability. There is a practical limit to how many coders can effectively work together so my hunch is the corporate desire to saddle these star coders actually makes the entire team less effective.

An alternate way to think about it is to look at other highly skilled professionals, such as a surgeon. The key for the surgeon is to get in there, do everything that needs to be done, deal with any problems that come up and sew up the patient before he dies. To accomplish this, the surgeon is surrounded by a highly capable and specialized workforce. There is an anesthesiologist, a highly capable nurse, perhaps an assistant with a specialty in a critical area, maybe a general physicians assistant, and a cast of characters to get things, prep the patient and move gurneys around.

I suggest we identify our star coders, surround them with a world class support staff and get out of their way. Make the goal of the support staff to get the star coder to zero downtime. Instead of dragging the star coder's pace, see how much he can get done if all the resources are at his fingertips. Get every expert he needs, access to every piece of info, and have a communicator that is capable of representing the star coder in meetings and batch up everything into efficient bites both ways. Make it so the star coder comes into the operating room, and there is a nurse there with his gloves and all his instruments all set out, and let him just crank.

Don't make the mistake of thinking a coder should manage people. Star coders are generally social misfits. They usually can't even get personal hygiene right, there is no chance they can develop people. Don't peg their salary to the number of people they manage. Aside from the demoralizing glass ceiling this represents, it doesn't comport with the reality of the impact the star coder has on the overall success of the organization.

The organization's job is to keep a pile of work worth doing in front of the star coders and their teams. Someone with real clout must have the mandate to run interference for these really talented people. Star coders shouldn't have to be constantly fending for their life in an organization. Currently, if you are mediocre but have good communications skills, you can do better than the star coder in an organization. That should never happen.

No star coder should be a lone wolf. They should be surrounded by a team of support that meet the star coder's level within each of their specialties and earn their trust. The support staff's mandate should be to make the star coder shine by supplying tools and removing obstacles. The whole group would be judged as one on their merits and great teams would earn reputation in the industry the same way a great surgeon does. If you need a spinal surgeon, people know who to go to. In the same way, a star coder and their team should be recognized and sought after.

Some surgeons work in pairs on particularly complicated tasks. Great teams should be able to get together if the star coders think it makes sense. Some support staff may be a member of more than one team if their specialty is demanded but for the most part teams function as close-knit units.

The ultimate success or failure of a team should be measured and members should be compensated with this in mind. Generally, the environment around the teams should be similar to an entrepreneurial incubator with projects around prototype stage handed off to the more traditional organization.

I would like to try this and see how it works in the real world. I think there are two ways to do it - within a corporation that has complete buy-in from the top and outside a corporation as a "tiger team" of consultants. The first is better while the second is probably easier. However, as the popularity of Entrepreneur in Residence roles within corporations grows, that will hopefully change.

So those are my thoughts. Leave a comment and let me know what you think. Would something like this work? How do you identify the star coders? Do you have any suggestions to the way this would be structured?

Crockford on JavaScript

Everything you need to know about JavaScript by Douglas Crockford:

Volume 1: The Early Years


Chapter 2: And Then There Was JavaScript


Act III: Function the Ultimate


Episode IV: The Metamorphosis of Ajax


Part 5: The End of All Things


Scene 6: Loopage


Level 7: ECMAScript 5: The New Parts


Section 8: Programming Style & Your Brain

Fix for Camera & GPS on the Galaxy Nexus with Android AOSP Jelly Bean

Proprietary drivers for the camera and GPS are included in Google's Nexus Drivers page at https://developers.google.com/android/nexus/drivers but the code to copy them into the Jelly Bean AOSP build isn't there. To fix, pull sirfgps.conf from a phone with the factory image: (obtainable from https://developers.google.com/android/nexus/images#takju)

adb pull /system/vendor/etc/sirfgps.conf

or grab a copy here: http://forum.xda-developers.com/showthread.php?t=1322765

and place it in vendor/samsung/maguro/proprietary/sirfgps.conf

Next, add the following to vendor/samsung/maguro/proprietary/Android.mk

###################################
include $(CLEAR_VARS)
LOCAL_MODULE := sirfgps
LOCAL_MODULE_OWNER := samsung
LOCAL_SRC_FILES := sirfgps.conf
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .conf
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE := gps.omap4
LOCAL_MODULE_OWNER := samsung
LOCAL_SRC_FILES := gps.omap4.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/hw
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE := ducati-m3
LOCAL_MODULE_OWNER := samsung
LOCAL_SRC_FILES := ducati-m3.bin
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .bin
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/firmware
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE := libpn544_fw
LOCAL_MODULE_OWNER := samsung
LOCAL_SRC_FILES := libpn544_fw.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib
include $(BUILD_PREBUILT)
###################################

and in the same file, change the LOCAL_MODULE_PATH for fRom to install into $(TARGET_OUT)/bin rather than $(TARGET_VENDOR_OUT)/bin. This drastically speeds up the front / back camera switching and stops the video camera from crashing. The fixed fRom settings should look like this:

###################################
include $(CLEAR_VARS)
LOCAL_MODULE := fRom
LOCAL_MODULE_OWNER := samsung
LOCAL_SRC_FILES := fRom
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/bin
include $(BUILD_PREBUILT)
###################################

Lastly, change your packages list in vendor/samsung/maguro/device-partial.mk to:

###################################
PRODUCT_PACKAGES := \
fRom \
libsec-ril \
libsecril-client \
sirfgps \
ducati-m3 \
gps.omap4 \
libpn544_fw
###################################

Now you should be able to clean compile AOSP and have the camera and GPS working smoothly.

Notes on Leadership and Sales

Leadership and sales are associated with having people follow you. The difference with leadership is having people follow you where they wouldn't normally go - possibly in a direction that they think is dangerous. Great leaders have followers that do great things and become heroes who wouldn't normally be. But the leader's direction has to be virtuous. Value / judgement / ethics all come into play when deciding if this is a good leader or just a salesman. Leaders tell you why you want to do what is necessary and it sounds very simple. A complicated message is a symptom of a bad leader. Timing is also a factor - it may not be a lack of courage but a lack of courage at the right time. The mark of a higher level of leadership is doing the the right but unpopular thing at a time when everything seems to be going very well.

Notes on Disruptive Management

If you want to be disruptive, you have to kill the sustaining forces sometimes. Strategy is what you say and tactics are what you do - be careful when they diverge. Management and leadership are oil and water types of things. Management is about keeping things running or the avoidance of change. Leadership is about being bold and breaking things - about change and innovation. Management is 80% of what you should be doing. Everything else should be breaking things.

Notes on the Integrated Approach vs. the Modular Approach

Clay Christensen's innovator's dilemma materializes when companies in mature industries myopically focus on profit. Financials are necessary but should not be the only focus of a company. Profit is not the reason Apple is in business - creating great products is.

Apple is an integrated company so they are out of the gate first. They popularize (and in some cases come up with) the new product categories. Google's Android can be considered the modular approach but Google doesn't directly make money from Android. I'm waiting to see who can actually monetize that. Google might monetize their Android investment through Motorola Mobility but they seem to have a hands-off approach, at least for the moment.