Skip to main content


Showing posts from 2014

Gaming is essential

I have written a lot about programming tricks and managing programmers here, but when I talk to people looking to learn programming there's some things I always emphasize to them.  The first of which is that programming is hard.
You're using all of your brain
In a world where nuclear physics and rocketry are discussed to lighten the mood, it should be obvious (but it isn't) that your brain is being pushed to it's limit.  I've mentioned it before, but it bears repeating that there are programmers who have gone crazy.  Your brain simply isn't designed to think this way 100% of the time.
You need to relax
That's why I always talk about finding ways to relax.  I tell programmers who work for me to get away from their computer during lunch.  If they're exhausted, I tell them to go take a nap.  I do it myself sometimes.  It's not a weakness.  Most of what we do is not on a keyboard but in our head, and your head doesn't turn off when you sleep, it def…

Nerd Culture & Non-technical Users

So I'm a bit put off. Here's an article that the arduino community thinks is fantastic.  I agree with some of his points, but he links to this article.  And that article is full of itself.

Let's start with the biggest invalid point in the original article "Nerd Culture Must Die".   He complains about inequality in programming as a profession.  He doesn't mention that same inequality in other professions (like healthcare where women are nearly 80% of the industry) or even that the inequality may be more associated with an overall inequality in the engineering industry where there have always been fewer women.  Perhaps it's a cultural issue, where boys are given electronics and girls are given dolls as children.  To leap to the conclusion that it is my fault as a "nerd" is inconsiderate of the massive effort I make every day to encourage the spread of knowledge.

But then there's Jessica.  That article made me very angry.  It's not that it…

Mintduino Programming Error

As I occasionally do, today I'm using this blog to post about a specific issue that I encountered, where I had a very hard time finding the answer on the internet.

Some Background
As of late, I've been spending a lot of time learning about microcontrollers, specifically the Arduino kind.  Soon, I suspect I'll be putting together a larger post on this adventure.

The Problem
I decided to test my skill and build a Mintduino from Minitronics.  This was a true test of my skill at building circuits thusfar, and it was very rewarding (I even got an extra microcontroller to build stuff with at the end).

However, after the build, I hooked up the obligatory FTDI Friend from Adafruit and could not get the Mintduino to accept the new program.  To be specific, I was getting this error:

avrdude: stk500_getsync(): not in sync: resp=0x00Unfortunately, this error has many causes.  Here are a few of the common ones.  Per the instructions at that link, I verified all of my drivers and checked t…

Why are we interviewing Developers by asking Architect questions? - Part 2

I was very fortunate with my latest post about programmer interview questions.  As a result of a large number of readers, the comments section started a discussion which was very enlightening.

Let's recap
My previous post pointed out a flaw in the current interview process for programmers.  When interviewing for a Software Developer position, we are asking questions that are designed for Software Architects.

The Comments were spectacular
One commenter noted an interview he enjoyed and how they avoided the problem of asking the wrong questions by simply having him write code.

Another discussed how these bad interview techniques negatively impacted his career.

And a third (We'll call him Nate)...well the things he said inspired this post.  So let's go over them. shall we?

The professional programmer
Being a professional means that you are conversant in the terminology of your industry.
I am a firm believer in Einstein's statement "If you can't explain it simply, you …

Why are we interviewing Developers by asking Architect questions?

I discovered something spectacular and I must write about it.

Calling a developer an Architect is something of a badge of glory.  It essentially means "this guy knows so many languages and techniques that he should be the final say in planning projects".  Developers who work with an architect tend to refer to his judgement whenever something new-to-them comes up.

This title is associated with an action: Architecting Code--but architecting code is simple.  Any programmer who's written even the simplest "Hello World" app from scratch has architected code.  The idea behind an Architect is that he architects code well.  He plans the code in such a way that it works, is easy to maintain and is easy to extend--at least in theory.

But what about the non-architects?  Every other developer in the office is just that--a developer.  They aren't stepping into a clean room where they are free to wave their paintbrush across the canvas.  They've walked into what is g…

I was stuck at the airport for 14 hours

What follows is an email I sent to James Crites, the VP of Operations at Dallas Fort Worth airport.  If it seems stupid or cranky, please note that I wrote it when I was both stressed out and sleep know, about half an hour ago.

I believe that problems this severe should make their way to the top, so I'm notifying you personally.

Let me preface this by telling you that what I experienced is commonplace.  It is so common that one of  the customer service managers said that he called his wife to tell her he wouldn't be home hours before the incident occurred because he knew it would happen.  Additionally, another person among the group waiting established that she had encountered this exact same scenario at DFW only 5 days earlier.  Naturally, she blamed the airport.
First, the airline screwed up.  They under-staffed themselves, and when inclement weather hit DFW airport, they were unable to retain enough pilots to get their flights out on time.  Following that, the…

Scrum/Agile and Doing it Right

TL;DR: Here are some things you can do to implement scrum more effectively around your workplace. 1. Explain it to your customers
   1a. Communication comes from your side to the customers, not the other way around
   1b: Code is still a process, and adding and removing features is not a simple task
   1c: Sprints are often enough communication
2. Sell it to your developers
   2a. Explain the good and the bad to them
   2b. Get them to like the idea before you move forward
3. Help your developers build a new workflow
Disclaimer: Let me start by saying that I am not some Scrum Trainer.  I am a developer who's been working with scrum for years.  I don't teach new teams how to do scrum, unless it happens to be my team ask for my guidance.  But I've worked at 6 different organizations who implement Scrum in one form or another, and so I have experience on my side.

Scrum is a hard transition.  It sounds easy, but I've yet to see a company get it together and follow all the (…

Let's Talk Tools

There's thousands of blogs, tutorials, and YouTube videos on how to write if statements and for loops.  There's thousands of different recommendations on good practices and what it means to write "good code" but the truth is, I was coding for a long time before I had any idea how many tools there were out there.  So this blog post is for the newbie programmer.  I'm going to recommend some tools for you and explain what they're for.  Maybe you'll be smarter than me, and start using them early on in your career.  Everything I'm listing here is free. Yes, there are pay versions of some of these products, but I'm linking you to free downloads, because coding isn't about waiting until you get a job.  Start using these at home today. They will make your career.

Your pencil and paper, the Text Editor:
The text editor is your sketchpad, your quick note taker, and your spare code storage.  Every programmer has his or her favorite.  The important thing …

Work Smarter, Not Harder

So a few weeks back, I checked in over 600 files worth of code in one day, and it occurred to me that that was a lot.  Why so much?  I was reorganizing code that was scattered about one large project into multiple projects so that it would build as libraries and so that there was some semblance of sanity to the location of things like objects and methods.

I know that I'm a fast programmer, but I think other people believe that I spend all day at the keyboard sweating trying to get that much code in, and that simply isn't true.  So here's my tips on how to work smarter, not harder, and get a lot of code on the books.

I should note that all of these screen shots I'll be presenting were taken during the actual exercise of cleaning and reorganizing code.  These are not "examples" or "samples" but actual code in a real environment.  The things I'm showing here are the actual things I did in the course of building the 600 files that I checked in.

Use …

What is #/products/toaster - The origin of the URL Hash

This post is historical, and exaggerated to emphasize points. It is not historically accurate, and it's tone is intentionally light, so that the subject matter is easier to absorb.

In the beginning, there was the internet Every website was a single webpage.  They were horrifying geocities nightmares, like this.

The internet was a treacherous place, and the Back button had one purpose, to escape something you never wanted to see in the first place.  But the .com boom happened, and every company wanted a webpage.  It became immediately apparent that a single page wasn't enough. So...

Routing was born Routing initially meant that you could link to any folder in the file tree that contained your website.  If you had a Tools folder inside of the folder with your website, then you could reach it on the web by adding /Tools to the URL.

The default page configuration was born.  When you go to a folder, the website would try to open the default page (usually index.html or default.aspx…

How to write good tests (in any language)

In the last few years, I've read manymany articles on how important testing is.  In fact, I'd say that it's possibly the single most blogged about thing in programming.  All of this advice is great, but what if you don't know how to write tests in the first place.  You can be following all of the advice, and writing bad tests, and getting no results for your efforts.  In fact, I suspect that there are PMs out there who have convinced their team to give up on testing because of this.  So, let's talk about writing good tests.

Scaffolding When it comes to testing, I personally follow the Steve Sanderson methodology: Arrange, Act Assert.  But this technical terminology just makes the comments hard to read, and in practice, they actually become Given, When, Then, so I skip the middle man.  Here's a sample of how I write test code.
//Given: Some intialization logic //When: We call some method/function //Then: We expect these results //CLEANUP (optionally, unchan…