The Working Programmer’s library

I like programming books. I daresay I’m obsessed with them. I collect them, they adorn my shelves and workspace as if they were trophies of the knowledge contained within them. The battles they fought are hidden in their dog-earred pages, marred by late nights and tossing them to and fro as I research them, commanding them to reveal their secrets.

On command, they relent to the pressure, spilling their secrets and marching back to my bookshelf, available at my beck and call. They are my fellowship, our common quest is to make me the best programmer I can be. This knowledge takes many forms, but the dead-tree book is the most basic.

It is strange then that I should recommend Safari Books Online. A virtual library available at your fingertips, so long as you are connected to the Internet.  This presents a problem, vis-a-vis being disconnected from the ‘net. Sacriledge, I know. Bear with me.

Safari Books solves the ‘OMG my boss needs me to write code in a language I’ve never seen before’ which usually happens at just the wrong time. I know Perl, but since our build servers don’t have Perl installed (gasp) I’m writing the script in Powershell.  Except that I’ve never written Powershell before.  Enter Safari books. Within minutes I was able to pull down Powershell in Action and Windows Powershell Cookbook immediately. Within ten minutes, I had the script written. 

It’s not the right tool for every job, but Safari Books Online is an indispensible part of your toolkit. Use it.

Attracting Talent – A Response to Eric Lippert

Eric Lippert posted a blog post today about attracting talent. He posed two questions:

(1) When you read a job posting on a career site, what are the things you look for when deciding whether you’re interested or not? Are there “red flags” that immediately make you unlikely to follow up? Are there more subtle indicators that discourage you? What encourages you?

(2) What would you find particularly attractive or unattractive about an opportunity to work on a developer tools team? (at Microsoft or elsewhere, though I am particularly interested in “at Microsoft”.)

I only answered the first question (quite simply, I was too nervous to even consider the second question), but I want to answer both in more detail. I was just nervous because Eric is a Smart Guy™, and people like me simply do not walk up to Smart Guys™ and start chatting as if I’m on his level. I am not. 

Things that Turn Me Off

1. If I get a generic, “We think you’d be a great fit…” I don’t apply. I’ve seen enough of those to know that they haven’t spent more than a few seconds looking at my resume. They saw a keyword and sent it based off of that. Thanks, but no thanks.

2. Trendy words: “Ninja Coder” / “Guru” / “Think outside the Box” .  My mom tries to use ‘cool words’ too. I try to use them with my younger brothers and sisters. It doesn’t work. You don’t know the lingo, you don’t watch the movies. Stop trying. 

3. No, I’m not sending you an updated resume when you send me an email with the words “We think you would be a great fit.” On Linked In or Stack Overflow Careers. In fact, I may just send you an email to gauge your interest. I’m going to ask questions in this email. As the knight said to Indy in The Last Crusade: Choose Wisely.

4. In the interview, Don’t try to stress me out. It’s just going to annoy me. I was in the Army. I trained for battle. I slept very little. I know what stress is. 

Things that Turn Me On

1. Companies that are known for treating Software Developers well. Google, Microsoft, Fog Creek Software, Amazon, SAS. I know that if I worked there, I’d be treated well and be around people that are the best and brightest. Every day would be a challenge for me to outperform the previous day. That turns me on, programmatically speaking.

2. Make me write code in the phone screen. Make me write more code in the interview. Ask me intelligent questions (no, I don’t know how to Move Mount Fiji, but my answer would include hiring foreign cheap labor). 

3. Good processes. I swoon when I see automated builds. If you have a CI build, I’m probably going to get all geeky on you. Unit Tests? I may just ask your CI server out on a date. That’s hot stuff.

4. Being able to make a difference. In Eric’s question, he talks about the Developer Tools team. That’s the team that makes the tools that you and I use to make our software. That’s like being the team behind the team! It’s definitely not headache-inducing crap line of business software. 

Ultimately, just like I said with regards to Amazon: I’d love to work at Microsoft. I’d move across the country to work at Microsoft.

 

MicroManagement

Last week I talked about Seagull Management. Today, in a slightly different vein, here’s a Budweiser commercial celebrating the Micromanager:

BUD LIGHT PRESENTS, REAL MEN OF GENIUS

Reeeeal men of geeeeeniuuuus!

Today we salute YOU, Mr. Micromanager manager.

“Mr. Micromanager Manager!?!”

Only YOU can fully appreciate the mind-blowing tragedy of a bunch of 18-22 year old athletes you‘ll never meet, losing a game.

“Don’t you TAAAAALK to me about perspective!!”

While others are too preoccupied with things like real life, you take your anger directly to the place where it will make the absolute least possible impact: An Internet discussion forum.

“Loggin’ on now!”

Your unique eye for logic allows you to sling turds of doom every which way, and then brag about how you were RIGHT as soon as one of the pieces sticks to the wall – regardless of how many dozens fell limply to the floor before that.

“See I told you sooooooo!!”

And if some idiot newspaper columnist has the gall to not be as incensed as you are, you unleash your fury down upon him with all the tenacity and mercilessness of a rabid pit bull with a tender buttock locked in its jaws.

“Total anonymity!”

So keep clicking away, oh Marauder of the Mousepad. Because when the results you so desire finally come about years from now, you can say it was because YOU demanded it.”

“How come they haven’t fired that dumbass coach yet?”

Programmer Pedantry

I’m a programmer. I’m also a writer. Put the two together, and you get a yummy stew full of pedantry. 

Free Market an economic system in which prices and wages are determined by unrestricted competition between businesses, without government regulation or fear of monopolies.

We haven’t had a free market in a really long time. Not since before the Federal Reserve was created in 1913.

Any action taken by government to regulate, manipulate interest rates (What do you think the Federal Reserve does?), or otherwise insert itself into the marketplace automatically removes the ‘free’ from ‘Free Market’.

You can argue for or against the actions by the government, but you cannot still call it a ‘free market’ once that has been done.

If you’re interested in economics, I recommend The Politically Incorrect Guide to Capitalism. It works whether you believe in Government intervention into the market or if you hate it. If you believe in government intervention, then this provides a useful counterpoint. If you hate government intervention, then it gives you evidence and logical reasoning as to back up your reasoning.

Now back to your regularly scheduled programming blog posts.

Seagull Management

From Flickr: http://www.flickr.com/photos/adobemac/1096715290/sizes/m/

During my time as a Sergeant in the Army, I dealt with many different types of managers. I’ll save my favorite manager for a later blog post; but for now I want to share an experience I had with Seagull management.

As it happened, I was in a unit with a new Second Lieutanent (2LT), the kind that just graduated ROTC and thought his stuff smelled like roses. Having been in the Army for four years at this point, I knew just a little bit more about the happenings in my team than he did. That didn’t stop him from behaving like a seagull, however.

Seagulls are nosey creatures. They fly in, see what they can mess with, poop everywhere, and leave.

That described this 2LT to a ‘T‘.

Generally he would do what officers were supposed to do (go to meetings), but then he’d also come back from the meeting and try to micro-manage every little detail of what we were about to do. In other words, he did my job for me.  Once he felt like he had meddled enough to assert his authority, he left us to pick up the pieces.

There is a special circle of hell for that behavior, and he was doing his damndest to drag us into it with him.  As the first-line supervisor of the team, it was my job to carry out his directives — but once he meddled into the how, he made me little more than a glorified grunt. A really well paid grunt, but one nonetheless.

Seagull managers exist in Software development too, or in this DailyWTF story, just think of them as one of the three Bs.

 

Convert or Pay the Productivity Tax

My Islamic studies professor in college frequently told this ancedote on the first day of class (or whenever he got an opportunity). It started out like this:

When the ancient muslim armies invaded other countries, they normally issued an ultimatum: Convert, Die, or Pay a tax. This usually resulted in the question: So how much is this tax? 

It’s no surprise that the muslim armies were able to invade many territories without bloodshed.

We need something similar in Software Development. Too many companies cling to Enterprise-y Version Control Systems that make even the smartest developer cringe when the subject of branching and merging is brought up.  Management clings to these systems without logic, and we suffer for that decision. It even pervades to our project management and defect tracking software (I’m looking at you, Test Director).

It’s time to issue our own ultimatum:

Convert, or pay the productivity tax.

We must stand up against the tyranny of idiotic version control. Not being able to branch and merge? What’s the use in having Version control? Not being able to commit code until it’s bug free? Sacrilege

There is a better way.

Joel Spolsky has written up an excellent tutorial on Mecurial and how it differs from traditional version control systems. Read it. Pass it around the office. Hound your manager. Light Pitchforks and Raise torches. Do whatever it takes: DVCS’s are free. They’re better than tradtional VCSs. 

Why aren’t you using them?

An Obituary for ASP.NET

ASP.NET died today. Much like Cobol, he leaves behind a legacy that will touch our lives for years to come.

ASP.NET grew up in the shadow of his older brother, Winforms. His father was ASP, his mother VBScript. They lived in a world much like our own, a world of webs and the things that connect them together.

ASP wanted a better world for his son. He worked tirelessly to make sure that his son never had to deal with bees and their awful stings. He worked with uncle MFC to create a safe environment where ASP.NET could play without fear of hurting himself or others. MFC, having no children of his own, sought this as his life’s work. Soon, the .NET framework was built, and ASP.NET’s purpose became clear: To become the framework for the web.

Like any rebellious child, ASP.NET didn’t listen to his parents.

He toiled in the web, jealous of  Winforms, emulating his ways.  Some might say he didn’t have an original thought for himself, that he just imitated his brother; they would be right.  

He saw the flaws in his classmates’ work, how they constantly forgot what he told them.  He knew that with just a little work, he could remember what they had failed to.

He knew this because Winforms remembered everything, and come hell or high water, he would too.

Staying awake late at night, he tinkered with what he would call Viewstate, believing that a cool sounding name would increase his standing with the girl across the moat, Perl. 

The Castle. From Flickr. Here: http://www.flickr.com/photos/lincolnian/370208387/sizes/m/ by Lincolnian Brian

Perl, the daughter of C and Larry Wall, had her own problems.  For so long she had run around with her glue, patching up different parts of the web. She spoke many different dialects, she  could even speak Gibberish and still get her job done, but she was tired. She was cranky.  Some called her insecure, but she laughed at their ignorance. Her ‘friend’ PHP treated her with contempt while imitating all of her best features.  She wondered when the world would let her retire. After all, they had PHP, they had Python, and they had Java. Why would they need her? Couldn’t she just rest?

It was not to be.

Meanwhile, ASP.NET wished to free his girlfriend Perl of all her troubles and Viewstate was his ticket.  They seemed an unlikely pair, ASP.NET and Perl, but it is said that opposites attract.

Predictably, Viewstate was heckled by PHP.  Java, being the robust gentleman he was, just kept eating resources, getting rich and fat off of all the features people were paying for. Java’s followers saw PHP as a poser, and ASP as childish; but when ASP.NET came out and they saw how easy it would be to use Viewstate, they were hooked, and for Java, the feast was over.

And so it came to be that ASP.NET was crowned king, with Perl at his side; able to rest a little more.

 Meanwhile, PHP worked to fill in the gaps of its knowledge. Simply copying Perl wasn’t enough – it lacked the magic Perl had. PHP had a huge vocabulary, but no way to categorize it.  Looking around at everyone else, it saw that they used namespaces to separate their vocabulary for their audiences. But, as is often the case with drastic change, it knew that it wasn’t going to be easy.

PHP worked to include namespaces, but not before shedding her dignity and self-respect, what little was left.

ASP.NET’s  rule was fought by Python, the snake that nipped at its heels, reminding him that Viewstate had left him slower and heavier than he used to be. Perl couldn’t even fend Python off, as he came with everything.  Python was winning. He could do everything that Perl could do, and he could speak clearly at the same time.

The web was a cruel world.

ASP.NET knew he would lose his kingdom if he didn’t change. Python and Ruby had been dating, but broke up when they realized that Django and Ruby-On-Rails were copies of each other. They are currently settling out of court. 

The infighting gave ASP.NET a chance to get it right; a chance to regain all that was lost. He hoped he could even pass the torch on, and allow he and Perl to retire to an island in the Caribbean, free from tax laws and all of the problems the race for #1 causes.

So he began his work, looking back on the design documents he inherited from his father. He still understood his mother’s language, but wanted to use a language he’d embraced early on in his life, C#. C# was a tribute to C, Perl’s mother, and C++, Perl’s aunt.  He knew that C# would encourage the remaining Java followers to embrace his work.

But that wouldn’t be enough. He would need something more, something that PHP’s friend Zend, Django, and Ruby-On-Rails had. He would need MVC.

from Flickr: http://www.flickr.com/photos/faisalsaeed/212339449/

The climb to Mount MVC was treacherous. Along the way he met a strange traveler who insisted on proving each step was valid before taking it. After three such tries he finally was able to gather the name of that strange, traveler: TDD. TDD and his little brother, Unit Test had just come back from the Agile mountains, hoping to spread their word among the heathens, pressing them to change their heath-ren ways. They had read the ancient texts, and knew that the evil Bugs could be squashed with their Agile religion.  They were confident of their success, haughty even.

But this story is not about them.

Shaking his head at TDD and leaving, ASP.NET would later realize that he was jealous that he could never have learned those ways. It would have taken much work, too much mocking, as his work depended very much on dependencies that were not easily removed.

Arriving at Mount MVC, nestled in the bosom of the Separation of Concerns in the Agile mountains, ASP.NET sought out the answer to his problems. There he waited and meditated, feeling the ebb of the web flow through his consciousness. From where he sat, gazing over the ranges below, and watching the various forms of life try to communicate.  His answer wasn’t something in the Mountain, it was the mountain itself.

Studying how the mountain was laid out in the Separation of Concerns, how it all interacted in symbiosis, ASP.NET knew he had his answer. He bounded back down the mountain.  He passed TDD easily, as TDD was stuck in a failing test. ASP.NET thought about stopping to help, but realized that TDD just hadn’t written the passing test yet.  Eager to reclaim his throne and his bride, ASP.NET sprinted back to his kingdom, arriving just as the tribe of Django, Zend, and Ruby looked as if they would converge on his castle, pitchforks in hand.

If he didn’t hurry, there would be nothing to save.

He asked Perl for one last favor: she was to hold a code-golf tournament to keep them occupied while ASP.NET toiled in his labratory.

Perl obliged, knowing that if C did not show up, she would win any code-golf tournament held (Her fears were unjustified, it would turn out, as C was still locked in her own Obsfucation contest. It was a similar last ditch effort to retain her own followers: Long abandoned except for by OpenGL, Unix, and Win32. As an extra-long aside, Win32 and Unix were still fighting, with Unix claiming that his hot Girlfriend, Apple OS X, could knock the sock off of anything Win32 had. That too, is a story for another day)

While the tournament was progressing, or rather, getting shorter, ASP.NET went back to web fundaments, back to what his father had taught him. The web could indeed forget, but he knew the ways around that without sacrificing his soul. Eating cookies while he worked, he looked at his father’s own manuals.  Seeing the answer before him, and remembering what he learned in the Agile mountains, ASP.NET finally had his creation.

He named it ASP.NET MVC, in honor of the Mountain.

Using the best parts of his father and his own life’s experience, he created something that would appeal to anyone who might defect to the Django, RoR, or Zend tribes. As a tribute to the zen masters in the Agile mountains, he even included something that he himself still thought silly: TDD.

With his creation complete, he carryed it down to the tournament. Seeing that the entrants were down to 28 characters, he knew it would end soon. Perl soon landed the coup de grâce with the -e modifer. Python and Ruby didn’t stand a chance. PHP and Java were cut in the first round.

ASP.NET showed his son MVC off to the crowd; everyone noting his strength, good looks, and physical prowress. MVC promptly pulled Ruby’s hair. Django took far too long to object. Zend, seeing his tribe in peril, left immediately to try to learn what the word ‘debugger’ meant.

Like any son, MVC didn’t listen to his father. He instead took in his father’s lessons in his own rebellious fashion. If ASP were still around, he would probably have chuckled, seeing his own parenting pains exacted upon his son.

ASP.NET died today. This was his story. He is survived by his Wife, Perl, his brother Winforms, and by his son, MVC. MVC is said to hike in the Agile mountains, fully steeped in the ways of object oriented principles.

Zend still hasn’t figured out what a debugger is, and Ruby is plotting her revenge against MVC for his hair-pulling stunt.  They have the makings of a cute couple.

 

How Stack Overflow Propelled me to the Front Page of Google

I’m a nobody in the world of programming. Literally. I’ve published next to nothing, I’ve done very little in the way of public projects, and I’ve never done any of the cool stuff that even a guy like Portman Wills or Jin Yang has. Heck, I’m a nobody.

Yet I’m still on the front page of Google when you search my name

Google Search for my name

More importantly, I’m on the front page when potential employers search my name.  Even better, my blog is the seventh link. Not bad for something with 2 readers (Hi mom!).

How did this happen?

I attribute it to Stack Overflow.  Two years ago, if you had done a search for my name, you would have come up with the yellow-belly from Star Trek: The Original Series. Not cool.

Commodore George Stocker

You’d have also come up with some guy that got blocked on Twitter. But me? I was on the second page… Where no one has gone before.

Anyway, back to how Stack Overflow rocked my Name to the top of Google.

It has amazingly good SEO practices. Not the shady, back-alley kind, but the Google-Optimized sitemap, the friendly URLs, and its sheer size.

It wasn’t all Stack Overflow though. I also had to give up my fear. Fear of seeing my name out there on the internet, fear of decloaking and showing the world I’m more than just a screen name (Gortok, in case you were wondering), and fear that I’d screw something up in some untold way. You know, like when you take the last bagel at a conference and everyone gives you the stink-eye.

The biggest part is that I had to build my online brand, and Stack Overflow gave me the tools to do that. That’s worth double the time I’ve spent there.

Extra: From the I-buy-a-volvo-and-I-always-see-a-volvo-on-the-road-department:

Good Idea, Bad Idea

GoodIdea, Bad Idea

 

 

When I let the cat out of the bag Wednesday, I took a chance that someone else who reads by blog (all two of you) wouldn’t have the same idea and beat me to the punch. I then further took a chance by telling the meta.stackoverflow.com crowd about my work with Markdown.

Good Idea: Being public about your intentions.

Bad Idea: Being public about your intentions if you care about someone eating your lunch.

In this case, I don’t care if someone comes along and does the same thing, or even does it better. That’s a win/win. I get a blog engine and I’m not on the hook to maintain it, and I get a blog engine I want to use. I’m well aware of the frameworkitis that can make its way into developing a blog engine, and I hope to avoid that, if at all possible.

Also, I contacted the Department of Cliches Department and asked them if I could extend my cliche quota to five since it was friday, their response? Not a chance in hell.

Has “Dedicated” Lost its meaning?

Coming into work this morning, I heard the word ‘dedicated’ on radio advertisements no less than 15 times. That’s in a 45 minute commute.

It appears that everyone and their brother is dedicated to their customers these days:

dedicated picture on teh google

I submit that we should remove dedicated from the marketing-speak lexicon and replace it with:

“We like money. We will make sure you keep giving us money by giving you the best product [or service] we can.”

At least then they’d be honest about it.