Or, “Why It’s Time For Me To Stop Trying To Reinvent Lisp:”
Just because you used to love the endless string of platformers for a long-dead game system doesn't mean that recreating them for the iPhone is a worthy endeavor. Just because you get a warm and fuzzy feeling when recalling thirty year-old UNIX command-line programs is different than putting them on a pedestal as model for how to design tools. That doesn't mean you shouldn't learn from the past and avoid repeating expensive mistakes. Just don't get trapped by thinking that older software or technologies are superior because they happened to be entangled with more carefree periods in your life. The future is much more interesting.
Recently, there have been one or two dozen posts about inequality in the workplace. And other kinds of inequality in North American society. Ted Han raised a very intelligent point:
My concern is that posts like this don't get to the folks who exhibit the most egregious behavior—Ted Han
Blogs and tweets live in the world of “Broadcatch.” I am using the word in its most general terms, to mean people mixing and matching fine-grained media that they choose—by whatever means—to be interesting to them personally.
Crowd-driven aggregators like Hacker News sift though and filter all of the myriad blog posts for those that are “popular” with the people who already read Hacker News. Since participation is voluntary, people who don’t like the vibe drop away, and people who like it stay. Over time, the crowd tends to converge on a few strong points of consensus.
Companies like Google blather about “relevant” search results, but their metric is whether people click the links. That is no more a proxy for relevance than whether a blog post is #1 on Hacker News for a few minutes. It’s a metric of how well Google is able to predict what their users want to click.
Effects like crowd-driven news aggregators, click-through driven search engine results, and others are driving the Internet towards being a place where people live in a little bubble. That presents us with a problem when trying to change the world with words: Whatever we write will tend to spread within the bubble of people who already agree with our idea, and be filtered out of the bubbles of people who disagree with our ideas.
This is as true of technical ideas as it is of purely social ideas: Some of my own technical blog posts sit at the top of Hacker News for hours but end up with negative points on programming.reddit.com. I depersonalize it by explaining to myself that different crowds live in different bubbles, and neither bubble is a particularly fertile ground for opposing ideologies.
So our words tend to spread into bubbles where the people who are reading them are already receptive to them. In more colloquial terms, "We are preaching to the choir." Are we wasting our time? Is society doomed to polarization? If not, how do we break out of our bubble? How do we preach to the congregation?
The answer is "No, we are not wasting our time."
We are not wasting our time, because the bubbles overlap and intersect. There are JavaScript programmers who are deeply interested in software engineering principles, entrepréneurs who think of themselves as socialists, and twenty-something men who respect working with women. I think of these people as living on the edge of our bubbles. And they are the ones who carry our words into other bubbles.
Quite often, technical change in organizations need management buy-in. But managers don't read techncial blogs. Nevertheless, managers read techncial blog posts when programmers write them an email and include a link to the blog post. To make that happen, you need a post that appeals to both the programmer and the manager, and is tailored to be easily forwarded as an email enclosure. Or easily tweeted.
People talk about posts "going viral." I won't use those words, because they imply a really broad adoption. I am thinking of ideas being passed around on a much more personal level. I call this a "portable" idea, one that is easily passed from one person to the next to support a point they already believe in.
If you write an angry rant about sexism in the workplace, it may never leave the bubble. But a thoughtful piece may plant some ideas at the edge of the bubble that will escape. A twenty-something male programmer may not need to be personally convinced of your argument, he may already embrace it.
But if your argument is persuasive and portable, he may be emboldened to speak up the next time he overhears someone else being sexist. He may quote your words or idea. He's using your portable idea to spread change outside of the bubble.
So, the answer to Ted's concern is also a call to action. Don't be afraid to preach to the choir. Don't be discouraged by the thought that your ideas are only going to be read by people who already agree with them. Be optimistic that people at the edges of your bubbles will also read them. And from time to time, if your idea is sufficiently portable, it will escape the bubble and you will have done your part to change the world
Like the President of the United States, my parents have two different skin tones and come from two different cultures. They were good, loving parents. Nevertheless, their marriage was illegal in many places when I was born. Why? Because some people considered it “immoral,” and their hatred and bigotry was allowed to trump the constitution and principles of equality that form the backbone of our values.
Half a century later, we have put men on the moon, used the Internet to bring people together, ended the cold war that threatened to destroy the world in Nuclear Holocaust, and eradicated diseases like Smallpox. We fly around the world inexpensively and quickly. We have made great progress on so many fronts. And yet. Fifty years from now, I will be dead, but somebody, somewhere, will be writing that they had loving, good parents whose marriage was illegal in many places. Why? Because today, some people consider it “immoral,” and their hatred and bigotry is still allowed to trump the constitution and principles of equality that form the backbone of our values. The whole point of valuing something is that you are prepared to make sacrifices for it. For example, many people value freedom of speech, to the point where they consider it more important to allow bigots to spread a message of hate and fear than to curtail the right of the people to speak their mind. It works the same way with equality of marriage.
I accept that some people believe that equality of marriage is in opposition to their religious teachings or social values. But my challenge to them is to treat it the way others treat freedom of speech, to say: “I disagree with how that person over there takes advantage of equality of marriage, but I will defend to the death their right to do so.”
That would be a position of the highest moral principle.
Recently, there has been a rash of blog posts about the best and worst ways to interview programmers. They advance wildly different approaches: Just do a FizzBuzz test, then get on to discussing experience. Don’t do any testing, but talk about past projects in detail. Don’t write code, but solve a problem. Write code on a white board. Write code on a computer with Internet connection and IDE. Don’t judge by more than whether the program is good enough. Judge by whether the programmer spends hours writing tests and polishing documents. Don’t ask about the explicit keyword. Ask about the explicit keyword. Manholes. Mountains. Hire the programmer who reads your mind:
So let’s talk about blog posts talking about programming practices. Code should be damn simple, 99% of the time. Code should be as simple as possible, but no simpler. Code should be written for people to read. Code should have complex underpinnings like DSL implementations and Mock testing frameworks to make the surface simple to read. Code should use meta-programming. Code should never use meta-programming. Code should use popular meta-programming libraries but nothing home brewed. Kingdom of nouns. Everything’s a function. OOP. AOP. DCI. POO!
And we can write another paragraph about higher-level design and development practices. TDD. BDD. XP. Spiral. Oh, you get the idea… It’s the interview thing all over again, and the programming practices thing all over again, a bunch of radically opposed ideas, each of which is backed by somebody who seems to be passionate, experienced, and convinced that they know the Way and the Light. How do we know which one’s best? Quick: Read every post and tell me, which interview process do you bet your next hire on? Which programming practice will you standardize on? What development practice will you pick?
The answer, as usual, is obvious when you calm down. Imagine I ask you an equally tough question: I have one million dollars in cash. What’s the best stock to buy? Let’s assume you talk to twenty people and let’s assume none of them are idiots. Where do you put your money? The answer, for almost everyone, is that there is no one best stock. There is a portfolio of stocks, and you choose the composition of your portfolio carefully to create an appropriate balance of risk and return given your personal situation.
Naturally, you avoid all ridiculous stocks that are backed by ridiculous business plans. But given a bunch of other reasonable choices, you put together a basket of stocks that are not chosen in isolation. Each one has some positives, some negatives, some volatility, some expectation of upside… And you mix them together to create the right investment portfolio. It’s the same with interviewing, programming, everything.
That doesn’t mean there aren’t bad ideas out there that need to be debunked and avoided. There are bad investments that don’t belong in anyone’s portfolio. And you can’t decide whether something belongs in your portfolio without a clear idea of its possibilities, its risks, its upsides and downsides. You get those by discussing and debating the ideas.
So carry on discussing and debating. And especially debunking! But when it comes time to choose, remember that none of these ideas are useful in a vacuum. No serious code base contains only one programming paradigm. No interview has only one question. And no team uses one, count them one technique for designing , developing and delivering software.
Blog posts look a lot like investment analyst reports. They say “BUY,” they say “SELL.” But we who read the posts are not like analysts, we're like mutual fund managers. We ask ourselves, “How much?” And we ask ourselves, “In a basket with which other ideas?"
In the depths of my personal bout with Klout status anxiety, I installed a browser plug-in that allows me to see the Klout scores of everyone in my Twitter feed. At first, I marveled at the folks with scores soaring up into the seventies and eighties. These were the “important” people—big media personalities and pundits with trillions of followers. But after a while I noticed that they seemed stuck in an echo chamber that was swirling with comments about the few headline topics of the social media moment, be it the best zinger at the recent GOP debate or that nutty New York Times story everybody read over the weekend.Over time, I found my eyes drifting to tweets from folks with the lowest Klout scores. They talked about things nobody else was talking about. Sitcoms in Haiti. Quirky museum exhibits. Strange movie-theater lobby cards from the 1970s. The un-Kloutiest’s thoughts, jokes, and bubbles of honest emotion felt rawer, more authentic, and blissfully oblivious to the herd. Like unloved TV shows, these people had low Nielsen ratings—no brand would ever bother to advertise on their channels. And yet, these were the people I paid the most attention to. They were unique and genuine. That may not matter to marketers, and it may not win them much Klout. But it makes them a lot more interesting.
The entire article is worth reading, but the ending is very insightful. To a large degree, having popular opinions makes you less interesting, less memorable, and less unique. I’ve read that you can create a synthetic “perfect’ face by algorithmically blending the faces of a crowd of people until you have a perfectly average, perfectly symmetrical face. And incidentally, one that is unremarkable.
Online, there is very little room for more than one Justin Bieber, Ashton Kutcher, or George Takei. Why would anyone want to follow your stream of memes, funny pictures, and celebrity gossip when there’s already another one just like it that their friends are already retweeting? Being popular is a winner-take-all market on the internet.
The long tail of tweets and posts is where the interest lies. Saying things that nobody else is saying will not corral a large audience, but it will corral a faithful audience, one that is interested in you and your original thoughts. In his book “The Tipping Point,” Malcolm Gladwell categorizes influential people as connectors, mavens, and salespeople. Although Klout’s algorithm is kept secret, it’s obvious that it rewards connectors heavily. But if you want to change the world, you need to be a maven, you need to create new things and share new ideas.
Klout isn’t the problem, of course. Blaming Klout for people chasing popularity is like blaming tape measures for men who—oh never mind, you get the idea. The point is, if something can be measured, someone will treat it as a score, and that someone is going to play the game to “win.” But it isn’t a game in the formal sense and you might discover that scores for online influence are like counting lines of code: Entirely orthogonal to your personal values.
I’m reminded of something Steve Jobs said when recruiting John Sculley to work at Apple: “Do you want to sell sugar-water for the rest of your life, or do you want to change the world?” Have the courage to walk away from the online equivalent of sugar-water, the empty-calorie feel-good tweets that move through the Twitterverse like Enterotoxigenic Escherichia coli through the intestines.
Change the world. Be memorable. Be original. Have the courage to be interesting.
I've never seen an open market in the wild, much less it "always winning”.You mean an open market like the "$1 trillion bailout not to collapse the whole economy" open market? Or an open market like "we enforce strict copyright laws to artificially limit each copyrighted product to one maker and it's pricing at his whims"? Or an open market with patents, for the same purpose? Or an open market with frequent cartels, to everything from dairy products to RAM? Last, but not least, an open market where a country with a military advantage has several army units deployed and several wars to secure resources and keep their prices down?
I think it is very definitely worth the struggle to try and do first-class work because the truth is, the value is in the struggle more than it is in the result. The struggle to make something of yourself seems to be worthwhile in itself.
Bob filled the espresso group with ground coffee and carefully tamped it before clamping it into the machine. Ted handed him two warm espresso cups, and moments later the rich coffee was streaming into the cups. Bob shut the machine off, handed a cup to Ted, and banged the expired grounds into the waste bucket. He cleaned the group and replaced it with a practiced flick of the wrist.
“Nice” said Ted, “Twenty-four seconds on the nose.” Bob considered for a moment. “Really? I just go by the look of the crema. When it looks delicious, I shut it off.” Ted was too busy nosing his cup to hear what Bob was saying. After a sip, Ted spoke again.
“I see you interviewed someone today. I’ve got one this afternoon. How’d it go?”
Bob and Carol
Bob smiled. “The turning point in the interview came when I asked Carol one of the standard coding questions. She knows her C++ all right. When building the container class, she used the ‘explicit’ keyword with a one-argument constructor. I asked her to explain why she wrote the word ‘explicit,’ and she immediately explained that she didn’t want the compiler invoking it as a constructor should she carelessly mis-apply a value as a parameter. If she makes that mistake in the future, the compiler will complain. This led to an interesting talk about constraints and contracts, regression-tests, and other stuff that is indicative of someone who approaches programming as a craft wrapped around problem-solving with code.”
Ted was buzzed on the espresso. “Great question, I thought I knew all the good technical questions, we were huge on them when I worked for Galtrucco. But that’s a new one: I’ll use it!” Before Bob could respond, Ted had rushed off. Bob shrugged and finished his drink.
Later that day, Ted was having another coffee and greeted Bob warmly as he passed by. “Hey Bob, I used your interview question!” Bob was perplexed. What interview question?
Ted and Alice
Ted frowned, then answered: “The one about the explicit keyword. I was interviewing Alice, your referral. She seemed like a great candidate, good experience, active in open source, has written some cool utilities. I had a look at her open source on the web. Looked great. And of course, you vouched for her. But you know, you can’t judge a book by its cover. When I asked her what the ‘explicit’ keyword did, she said she vaguely knew about it but never used it and would have to look it up...
“How, I asked her, does she handle unintended implicit conversions? She gave me some platitudes about code coverage and unit tests, but I immediately suspected she was one of those ‘All hat, no cattle’ developers, the kind that can talk a good line and put together small, good-looking things for showing off but can’t do any serious work. Sure enough, when I asked her some more specific questions, like whether she could write out the signature for certain Boost library functions from memory, she drew a blank and explained that her tools provide that sort of detail via auto-complete.”
Ted set his jaw. “It wasn’t long before it was obvious that she wouldn’t be a good fit. I sent the NO HIRE email before she had even left the room. I wanted to tell you about it, I know you’d be astounded to discover she pulled the wool over your eyes. She couldn’t even pass your pet interview question!”
“Hey!” Ted continued, “Where are you going?” Bob stopped and decided that some situations were so serious, only humour would do.
“I’m a programming superhero, and I must root out all wrongdoings. There has been an injustice; I am needed elsewhere.” He hurried away, there might still be time to save the interview process with Alice.
I just want to remind certain folks that I'm not a recruiter. I always try to make introductions, but the people offering me money for leads are wasting their time. Neither my integrity nor my address book are for sale, and if you want to meet developers for your startup, then you'll have to find a way to become less busy when developers are attending local meetups and hackathons.
(Snarfed from Pete Forde. This isn’t really a “post,” it’s a little something I’m saving so that whenever I receive a certain type of email, I can either copy and paste the text or—if I’m feeling especially lazy—I can simply forward a link to this page in reply. Feel free to use it in exactly the same way.)
By now, everyone is familiar with the idea that Facebook’s purpose is to strip-mine your personal data and behaviour for information they can sell to advertisers. Whatever you share on Facebook is also shared with Facebook. You know that, and I presume you’re good with that.
Facebook prefers that you share your behaviour with as much of the world as possible. It’s possible to control what you share using now-you-see-them, now-you-don’t controls that they provide. For example, you can say that you are only sharing your Work History with friends, but not with friends of friends. If Tom’s your friend, Tom can see that you used to work for Initech, but his buddy Jerry can’t.
If Tom decides to share his own work history with the world, that’s Tom’s business. Imagine he decides to go job hunting. He puts together his resumé and shares it with a headhunter. I think we all expect that he is not supposed to take all of his friends’ resumés and hand them to the headhunter as part of looking for a job. If a headhunter asked him to do that, we’d call it pretty sleazy. And if Tom went along with it, we’d be upset with him.
Yet that’s exactly what’s going on in the world of Facebook by default. Here’s an app that purports to help people build their “professional network:"
If you share your work history with friends and they use this app, you’ve just silently shared your work history with the people who built this app. And your locations data! I have visions of them selling an employee profiling service: "Mr. Braithwaite claimed to be employed with Initech, but he spent an awful lot of time at Sense Appeal Coffee Roasters during that time period..."
Did you read and authorize their Terms of Service? Neither did I! Luckily, Facebook has a way to shut this nonsense down. Let’s look in their privacy settings for “Apps, Games and Websites:”
There it is. Look at what you're sharing by default with all of your friends' apps!
Selfish bastards that we are, we do not wish to make our friends’ experiences “better and more social” when they use apps that we don’t personally authorize. Turn everything off and save changes. Voila! You’ve stuck another finger in the dike holding back the endless flood of Facebook privacy loopholes.