Wednesday, June 12, 2013

The Code That Needs To Be Written

I have many good reasons for not wanting to be a manager, but they all boil down to this: I enjoy writing code.

I recently read a blog post about not writing code. If you haven't read it, I encourage you to do so. It's insightful and right on all counts. It's also biased, as you can see from the following quote:
My job isn't to write code. It never was. It has always been to make people's lives better and more productive.

Years and years of experience have taught me to avoid writing code when I can and write as little of it as possible. Every line of code you write has its cost. Some of that cost is the time it took you to write it. Some of it is the time it took you and, hopefully, at least one more person to test it. And then there's the time it will take you or someone else to maintain it. All in all, writing code is not something to dive into without careful thought.

As a coder, every line of code you don't write spares you and your team time. The question is, how do you spend that "extra" time? You could deliver the product earlier! Just kidding, it's more likely you'll spend that time writing other, more important code.

All joking aside, the above is a very serious, important point: don't avoid the code for the sake of avoiding code. Write the code that needs to be written. And there's always some code that needs to be written. While it's theoretically possible to build a complete, non-trivial software solution without writing a single line of code, I've yet to see that actually happen. At the end of the day, when all the management decisions have been made, someone will probably have to write some code

There are many ways of making people's lives better and more productive. Writing code might not be my business, but it is my calling.

Thursday, March 21, 2013

Off With Their Heads: The PyCon Incident and Our Society

Fair warning: If you've come here looking for a quick validation of your arguments for or against Adria Richards, you can go on elsewhere. I'm not interested in "winning a debate" here. Also, I'm a white male, so if you think that makes me unfit to have any opinion on this topic, I also invite you to move on. Still here? Good, let's have a civilized conversation.

If you're part of the software development industry and have looked at the social media over the past two days, you'll have heard of Adria Richards and what happened at PyCon. Just in case you haven't, though, here's the short version: two guys working for some of the sponsors were sitting within the earshot of Adria and making crass jokes involving "forking the repos" and "big dongles". I invite you to read Adria's blog post about it before going on.

Right off the bat, let me tell you that I'm not writing this post to condemn either these guys or Adria. Like I implied at the top, I don't see things black and white here and I think that too many people currently participating in the conversation -- including Adria -- are looking at this as a battle to win. This is something that bothers me a lot and I think something needs to be done about it. Before we get to that part, though, we need to discuss the incident a bit.

What Happened?

The first I heard of this incident was this very morning, when I looked at Hacker News front page and noticed that there was a story that had over 900 points and more than 800 comments. It was a link to a Pastebin text that paints what turned out to be a rather one-sided picture. My first reaction was outrage: just one paragraph into the text, my imagination conjured a vivid scene of two guys talking in a hallway and someone sneaking up on them to take a photo. I instantly developed a strong dislike for Adria and had to fight that dislike all the time while I was looking for more information. There's still a part of me that wants to hate Adria and I say that to illustrate the importance of not acting out on your first impression.

Here's the thing you need to keep as first and foremost in your mind whenever you stumble upon a situation like this: you don't know enough. I don't know what the words of the joke were. I don't know if their joke had anything to do with what was being discussed on stage or not. I don't know if the guy that got fired had a stellar record within his company or was considered problematic. Those are just some examples of things the vast majority of us don't know even now.

So let's start by sticking to what we do know:
  • If you're at a convention, you represent your company and your actions can reflect on it.
  • If you're sitting together with a bunch of people arranged in rows of seats, your expectation of privacy drops rapidly.
  • It is not acceptable to ruin someone else's experience for them with your conversation. It's like talking in a movie theater.
All in all, it was definitely not okay for the guys in question to do what they did and neither Adria nor anyone in her position should be expected to tolerate it. For the record, I also agree that just talking to the guys directly would most likely been ineffective. I've seen people deflect the complaint too often to keep believing that this approach works.

That said, things turned ugly on more than one level and this is what I want to discuss here.

Off With Their Heads!

If you look at Adria's Twitter stream and at some of the blog posts around, you'll notice something interesting: people have taken sides and are arguing against the other side. It's like we've dug two huge trenches and people in each are now taking potshots at the other trench.

Let's take a step back and look at the outcome of the incident, without foaming at the mouth. One good thing is that the PyCon Code of Conduct got upheld and it's been made clear once again that those aren't just words. Another good thing is that unacceptable behavior, got punished.

On the other hand, one undeniably bad thing that happened is that a person lost a job. I say "a person", because it should not matter whether it was a man or a woman or what their skin color is. I agree wholeheartedly with Avdi Grimm when he says:
We need space between "you're fine" and "you're fired".
Did the guy from PyCon deserve to be fired for his jokes? It depends on a number of factors: whether his joke was downright sexist or just immature, whether he was fired just for that or he had other problems at work, and so on. If we assume -- as most people seem to -- that his jokes were merely immature and that he was fired only for that, then I would argue that such a drastic disciplinary measure was out of proportion.

Another bad thing that happened is that a huge controversy has been made out of this and the rift between men and women in tech -- a ridiculous rift that shouldn't exist in the first place -- has likely been made wider.

Nearly everyone is out for blood. Some people are viciously reveling in the fact that one of the guys lost his job, while others are furiously demanding an apology from Adria and SendGrid.

It's like we fell down the rabbit hole and everyone is either the Queen of Hearts, screaming "off with their heads", or a part of her army of card soldiers.

It's too easy for things to spiral out of control and out of proportion and I find it worrying that, in our society, you can cause a social media avalanche with one tweet and set loose a mob on someone. Regardless of whether you feel righteous about it, you should step back and consider all the possible consequences before committing to an extreme action.

Punishment, Fear and Empathy

Trigger Warning: this section makes references to a high-profile rape case, so you might want to skip to the notice that says "End Trigger Warning".

Events at PyCon are really just a reflection of our society's attitude in general. One recent example that illustrates this attitude is the Steubenville rape case. In case you're not familiar with it, go Google it, because I'm not going to describe any details here. What I do want to focus on was the way certain media comments were handled.

CNN reporter Poppy Harlow made the following comment about the case:
It was incredibly emotional, incredibly difficult even for an outsider like me to watch what happened as these two young men that had such promising futures -- star football players, very good students -- we literally watched as, they believe, their life fell apart.
The public reaction was one of outrage. Again, my first reaction was similar. However, I later stumbled upon an honest and humble questioning of this reaction by a writer I admire greatly and that made me stop and try to think more critically.

There is no question whatsoever that these two youths deserve their punishment. I believe there's no defense or justification of their acts. That doesn't mean that the situation isn't tragic, not only for the rape victim, but also for them. These are two people that could have had a much better future, if only we, as a society, could have detected early the flaws in their upbringing and corrected them. It really is tragic to see all three lives damaged so profoundly. That's why we call certain things tragedies: the net outcome is negative.

Yet the society at large seems to value only the punishment and no one is allowed a modicum of human compassion and empathy for the bigger picture.

End Trigger Warning

The problem with the PyCon incident and with our society in general is that we manifest disproportional care about punishments. It's certainly necessary to punish inappropriate behavior, but is it enough?

As a father of a six year old kid, I can emphatically claim that it isn't. Believe me, it's a mistake I made earlier and the result was that my son was afraid of me. When he said so, my heart nearly broke. I've been careful ever since not to repeat the same mistake.

Another thing I had to learn was that not every offense deserves the same punishment. If your kid peed his pants because he didn't want to pause the damn video game, it's not the same thing as throwing a temper tantrum because you told him he can't play before he does his homework.

You cannot solve a behavioral problem by simply punishing the bad behavior and stopping there. You need to look at the bigger picture and you need empathy. Fear is a poor problem-solving tool.

I applaud Adria Richards for not tolerating unacceptable behavior and standing up to it, instead. I also disagree with her methods and believe there were better ways of dealing with things.

Most of all, I strongly feel that, instead of glorifying the outcome of the PyCon incident, we should focus and keep looking for ways to change our culture, so that the history doesn't repeat itself. 

UPDATE #1 (2013-03-21, 15:02 CLST): Continuing the trend of punishment-oriented overreaction, it appears that SendGrid has decided to fire Adria Richards. I am still hoping that they were simply hacked and that this is false information spread by the misogynist mob of script kiddies, but that hope is fading fast. I've never been more depressed about people illustrating my point for me.

UPDATE #2 (2013-03-21, 19:29 CLST): SendGrid has just posted an official explanation of their decision. While I still disagree with two people losing their jobs over this whole situation, I wholeheartedly agree with SendGrid's statement that Adria's "actions have strongly divided the same community she was supposed to unite".

Sunday, March 17, 2013

Mrs. Mayer's Major Misstep

I can't help feeling that a lot of us have had some rather wild expectations from the 21st century. We watched "Back to the Future" in our teenage years and fantasized about flying garbage-powered cars. We read Asimov and fantasized about having robots throw out our trash while we colonize other planets. We watched Star Trek and the idea of a post-scarcity society filled us with hopes and dreams.

The reality has yet to catch up with science fiction, but we did get to see quite a few technological advances that were nothing short of amazing. Unfortunately, it seems we expected to see the society change for the better at an equal pace as technology and that's why we keep getting disappointed on a regular basis.

Take telecommuting, for example. The very idea that you can be in a large team doing a complicated job and contribute your part from home would have been considered fantastic when I was a kid. Indeed, it was a fantasy back then: Asimov's novel "The Naked Sun" describes a society where almost every social interaction is done via holographic telepresence. Since then, the availability of telecommuting as an option has improved many lives and quite often resulted in a net gain for everyone involved.

Then came Marissa Mayer's decision to ban telecommuting at Yahoo. Unsurprisingly, the initial reactions across our virtual global world were largely those of outraged criticism. A furious debate sprung up between those who condemn her move as oppressive and those who see in it a logical necessity for Yahoo as a company to catch up with the competition. More than two weeks later, the discussion has slowed down fractionally, but it's far from stopping, as new articles and posts keep popping up all over.

Although much has been written about benefits and drawbacks of working from home and about whether Marissa's strategy is good or bad for Yahoo, that's not really the crux of this debate. Much like the assassination of the Archduke Franz Ferdinand was just a pretext for World War I, but not the real reason for it, the outrage about Mrs. Mayer's decision stems from its potential effects on the society at large.

It's amazing how many people still get this wrong. For example, Rebecca Greenfield of The Atlantic Wire writes that we should chill out, because Marissa Mayer's memo is not about us:
But when Mayer declares an end to working from home, it does not in fact put an end to working from home elsewhere. Which is a relief because, if we've learned anything, some people really don't want to work in an office all the time.
It sounds reasonable on the face of it, but it's either downright disingenuous or just misguided optimism, depending on how generous you feel when you read it.

If you really think Marissa Mayer's decision is only about Yahoo, then you're living a sheltered life. Regardless of its position in the Silicon Valley's pecking order, Yahoo is still a large, prominent company and, as such, it can and does influence the society at large. Right off the bat, there were places where Mayer's move was taken as a sign that working from home should be banned.

Take, for example, this article from The Economic Times. Here's a choice quote:
"Flexitime is a utopian concept that is not going to help anyone," says K Ramkumar, Executive Director, ICICI Bank. "Whatever is not natural to the market and commerce, will not work. Customer is the king."
You might doubt the quality of the source, but it does not matter whether Mr. Ramkumar really said that or not. What matters is that there are numerous companies and managers who think like that and who must have been elated by the implicit validation they received from Mrs. Mayer's decision.

Here in Chile, the prevalent management style has been given a colorful name: "The Ranch Owner". What that means, in short, is that a lot of managers here expect their commands to be taken as divine law. For them, the topic of employees' happiness can be summed up with "I pay you to work. Whether you're happy or not is your problem."

What I'm driving at is that high-profile decisions in a company like Yahoo have an effect on much more than the company itself. The ripple effects of those decisions can affect a large part of the world.

To mitigate the impact of her decision, all Marissa Mayer had to do was make her telecommuting policy a bit more moderate: allow working from home on a case-to-case basis and, perhaps, choose a better wording that acknowledges telecommuting as an option that can enhance the quality of people's lives in general.

Instead, she's being defended and even praised for making a tough, controversial choice for the good of her company. The effects of her decision are being swept under the carpet of "fostering innovation", by people like Rebecca Cooper in her article for Washington Business Journal:
If she thinks bringing all her workers together in one place to innovate is the way to rebuild the brand, then I think we should let her try. I'm all for companies trusting their employees and giving them the ability to perform anytime and anywhere they can flourish. But I also think we shouldn't react so quickly to condemn this CEO for trying some old-fashioned togetherness to reboot Yahoo.
Even more chilling are the stories that praise her for "basing her decision on data". There's nothing wrong with consulting VPN logs and finding out that a lot of people are abusing their telecommuting privileges. Getting from there to outright banning telecommuting with no case-to-case considerations has nothing to do with data. Promoting the idea that you can make any decision infallible given enough data is downright irresponsible, especially when supported by flawed arguments such as this one:
Once, a Google designer quit the company in a huff because he was tired of how Mayer, in charge of how homepage looked, would choose design elements like color or font not based on taste, but raw data.

For every design variable, she looked at how users interacted with Google with one design — and then the other.

If the data showed users were using faster one way instead of the other, that particular design choice won out.

It's hard to argue that Mayer's process didn't work for Google. It was not the first search engine on the market, but it's just about the only one anybody uses now.
Conflating Google's success as a search engine with Mayer's decision making process about Google home page design is naive, but it takes a whole new level of self-delusion to use that as an argument to blow Mayer's analysis of VPN logs out of proportion and defend her decision as "data-driven".

Big companies nowadays parade their social responsibility initiatives and milk them for all they're worth. Yet when it comes to having a care about how your words might influence the lives of workers across the planet, many people seem to think it's not such a big deal.

After all, why should we care about the power of words? "Sticks and stones will break my bones, but words will never harm me." If that's what you subscribe to, then maybe you should reconsider.

Monday, March 4, 2013

The Great Programming Debate

Over the last few years, I've noticed a pattern that keeps repeating in Internet forums and blogs:
  1. Someone asserts that programming is or should be for everybody, usually misrepresenting it as a glamorous and easy job full of benefits and no drawbacks, like this.
  2. Someone else posts an emphatic counterpoint, like this.
  3. A third person tries to point out that a certain degree of "programming literacy" should be required and goes on to point out that everyone knows (or should know) how to read and write, like this.
  4. The discussion devolves into polite bickering, because at this point most people are usually past their threshold for completely unbiased discussion and are invested in their own point of view.
I happen to have my own point of view, but it usually gets lost in the noise, since I invariably try to contribute it in a discussion during step 4. Looking back, I can see I've weighed in on both sides of the debate and I think it might be interesting to try to share a more balanced view and, perhaps, bring the people from the two extremes a bit closer.

Why Programming Should Be For Everybody

As I pointed out recently, in a similar discussion, I got into computers when I was 7 years old. Back then, "getting into computers", at least in my country, meant getting something like ZX Spectrum or Commodore and either playing games or learning how to code. Games were in English and a lot uglier than their arcade counterparts, so it should come as no surprise that most kids who had computers went on to learn how to make them "do tricks". That's the real allure of programming for a kid: you're typing in seemingly incomprehensible stuff and the machine does something. It's magic!

Not everyone had a computer, mainly because we were living in Communist Yugoslavia and it was not easy to import one, but nobody told us that computers are "not for everyone" and that only trained professionals can program. It was a slightly weird hobby to have, but it grew into some of the best years of my life: I grew up believing that the world would be transformed and that I would be part of it. Some days I felt like a combination of a wizard, secret agent and super-hero; other times I felt like a rebel straight out of Mentor's Hacker Manifesto.

At no point did I feel like a kid who's playing at being adult and should leave it to professionals.

You might think I'm attacking a straw man here, but this sort of elitism seems to be increasingly more prominent in discussions nowadays:
Sorry, but those things are technology and should be worked on by technologists because there's literally no on else who can work on them
That choice quote came from a discussion on Hacker News and it's the kind of extreme point of view that provokes people to react with very emphatic counterpoints.

Why Programming Isn't For Everybody

The problem with emphatic counterpoints is that they tend to go to the opposite, equally unhealthy extreme. If you've watched "What Most Schools Don't Teach", then you know that the intentions and goals behind the video are laudable. You probably also noticed that programming has been grossly misrepresented.

If you didn't know better, if you were the stereotypical impressionable youth, you might have walked away from that video believing that programming is easy if you know addition, subtraction and multiplication tables and that working as a programmer is a lot of fun, where you get free gourmet food, play video games and jam with a band inside an awesome office. You might also get an impression that you would be programming flying robots, self-driving cars and medical equipment.

As much as I agree that programming should be taught in schools -- and I'll get back to that later -- the fact is that programming is not easy and good programming is damn hard. To make things harder, good programming is a lot more important today, precisely because computers are so widespread. Bad code does have the power to ruin lives. I'm not talking about medical equipment or space shuttle systems here: a bad credit report won't kill you, but it might ruin your life for years; a badly programmed system might incorrectly match you as a terrorist.

When conveying a positive message in service of a good cause, you must take care not to go to extremes. Nobody tells kids that being a doctor is as easy as putting on a stethoscope and learning which side of the body holds the heart and which the liver. By simultaneously downplaying the difficulties of programming too much and painting a glamorous picture of it, you're setting kids up for disappointment:
We’ve all been raised on television to believe that one day we’d all be millionaires, and movie gods, and rock stars. But we won’t. And we’re slowly learning that fact. And we’re very, very pissed off.
-- Chuck Palahniuk, "Fight Club"

Incidentally, you're also bruising the egos of everyone who has worked their ass off for more than ten years trying to get closer to being a master programmer. While that's the most forgivable mistake, it still merits being mentioned, because you're alienating the very people you need the most.

Shades of Grey

In the end, it all boils down to recognizing that things aren't black and white. Putting the programming on a pedestal, unreachable by all but a select few, is as wrong as representing it as a glamorous job where anyone can be a rock star if they only try.

I agree that all schools should teach a certain level of programming, just as they teach literacy and a certain level of mathematics. In our society, computers are everywhere and everyone should be brought up to understand them and be reasonably proficient at manipulating them.

On the other hand, even though everyone is taught reading and writing, not everyone ends up being a writer. Even those who do are not necessarily successful. Likewise:
  • Knowing basic biology does not make you a doctor.
  • Learning how to play an instrument well enough to play it professionally requires constant practice and even then you might never get to be famous and hugely successful.
  • Getting into NBA requires more than being able to run the length of the basketball court.
  • Being able to prepare scrambled eggs or even come up with a recipe or two of your own doesn't make you Jamie Oliver.
Are these analogies exaggerated? Yes, but so are some messages we offer about programming. Let's face it, not everyone will have the aptitude to take make programming more than a hobby.

The important thing is that people of all ages need to be free to try it and we need to welcome them. However, it's equally important to make sure it's okay for them to fail. Our industry needs all the good hands it can get, but it's hard enough as it is without adding tons of bad, unhappy programmers who were promised the world and tricked into believing they could get it by wishing upon a star.

Thursday, February 21, 2013

Another Step in The Longest Journey

Over the last two weeks, I've been tweeting quite often about a certain project on Kickstarter. It's a game called "Dreamfall Chapters: The Longest Journey" and, if it doesn't ring a bell at all, I want to tell you why I'm so excited about it.

I've always loved video games, for the same reason I love -- and practically devour -- books: they tell me magical stories, take me to incredible places and allow me to do impossible things. The first game I ever played was "Chequered Flag" on ZX Spectrum 48 that my parents gave me when I was 7 years old. Since then, I've watched the history of video games unfold and it has been a fascinating journey.

Right now, the gaming industry is in a state that I find pretty disappointing: there's a bunch of big players that are mostly staying within the bounds of their franchises and churning out sequels following their tried, true and increasingly tired formulas. My prime example is Ubisoft. They won my heart with "Prince of Persia: The Sands of Time" and "Assassin's Creed". Then they broke it with "Assassin's Creed III". To be precise, they didn't break it all at once: they chipped away at it until it broke. It was a blow to me when they abandoned the beautiful "Prince of Persia" reboot in order to squeeze out "The Forgotten Sands" like another bowel movement, but what really eroded my respect for them was the way they kept stretching Desmond's story in the "Assassin's Creed" franchise until it felt like I stepped in a piece of bubblegum. Another example is Bethesda, although this one is much more positive, because they haven't (yet) pissed all over their players. The worst thing they've done is the progressive dumbing-down of "The Elder Scrolls".

Truly different games are rare and precious and if I had to single out a few, I would certainly start with "Shadow of the Colossus" and "Heavy Rain". Both throw away most of the conventions held dear by other games and come up with something unique. The former tells a pretty minimalistic story in a profoundly haunting way that leaves you in a pensive mood. The latter combines the best of reading books and playing video games: it's incredibly rich and immersive like a good book, but interactive and with a flexible story like a good game.

On the bright side, extreme innovation is not required to get a great game. Sometimes a brilliant execution of old gaming formulas will do the trick, such as Rockstar's "Red Dead Redemption" and "L.A. Noire". What makes these games exceptional is the way they explore profound themes through rich stories wrapped in engrossing gameplay.

This is why I'm so enthusiastic about "Dreamfall Chapters". For those of you who don't know the history behind it, it's the third and final part in the saga that started in 1999 with "The Longest Journey", a point-and-click adventure. The second part came out a whopping seven years later in the form of a third-person 3D adventure called "Dreamfall". Both games feature not only exquisitely rich and memorable world-building, but also excellent storytelling, with memorable characters and thought-provoking motifs, and beautiful graphics. And now, in 2013, Ragnar Tørnquist and his team at Red Thread Games are working on the final leg of a truly epic journey, wholly deserving of being called the longest: "Dreamfall Chapters".

Now, let's step back a bit here and focus on one important fact: how much passion, patience and balls does it take to stick to a dream over the course of 14 years? For that alone, I would have been inclined to back "Dreamfall Chapters", even if I hadn't played or heard of its prequels.

That, however, is not the primary reason why I'm trying to do all I can to promote "Dreamfall Chapters". The real reason is because I know Ragnar and his team are going to produce another masterpiece that will not only bring enjoyment to countless players across the world, but will also bring a breath of fresh air to the gaming industry.

Here's why I trust the Red Thread Games team: I first played "Dreamfall", without even having heard of "The Longest Journey". I played the whole game and enjoyed it immensely, without having any idea that it's a sequel. I never felt lost. There was never a "something doesn't end up" moment or "am I missing something here" feeling. And yet, when I discovered "The Longest Journey" and played it, not only it fit perfectly, but it transformed "Dreamfall" for me. So far, I've only had one other experience like that: when reading Discworld books by Sir Terry Pratchett. If you've read Pratchett's work, then you know how high a praise that is.

By all means, don't take me wrong: I don't claim these two games were perfect. "The Longest Journey", for example, had one of those "dude, wtf?" puzzles that old-style adventure games were so criticized for; just look up "the longest journey duck puzzle" on Google. "Dreamfall" had a totally superfluous combat system that makes a game of "Pong" feel like "Ninja Gaiden" in comparison. Yet, despite these imperfections, these games were -- and remain -- some of the most enjoyable adventure games out there.

So far I've covered why I trust the team, but I haven't really given much details about why I believe this to be so important. So it's another adventure game, albeit an excellent one, so what?

I'm very passionate about games. Apart from enjoying them as a player, I'm also one of those few adult programmers who hasn't outgrown the dream of making them. For me, it's important not only what games are made, but who makes them and how.

Ragnar Tørnquist left Funcom and founded Red Thread Games in order to make "Dreamfall Chapters". Don't get me wrong, I have nothing against Funcom at all, but the fact remains that a well-known game designer and one of the iconic figures of game development industry left an established, stable studio and went indie to make this game. And it's not any game, it's the long-anticipated finale to a saga that has, despite any imperfections we might find in it, earned its place in the history of video games.

I want to see it succeed and I want it to be a huge success. Apart from being a work of art, it will also challenge the status quo by showing that it really is possible to make a masterpiece without clinging to the old publisher-developer structure. And, as a bonus, it will contribute to Linux and Mac gaming scene and bring back some of the glory to PC gaming, wresting a bit of power from the tightly controlled walled gardens of the console world. All in all, it should be an important step in a journey even longer than "The Longest Journey": the journey through the history of gaming.

If you're still with me after all these words, then I hope I've convinced you to at least go to the Kickstarter page for "Dreamfall Chapters" and look at what you find there. And after that, if you feel moved to back the project, then so much the better.