Back in 2016, I attended the Agile Alliance Technical Conference (since renamed Deliver:Agile, which I think was a HUGE mistake, but that’s for another article) I saw a keynote by Uncle Bob Martin called The Future Of Programming (video of that keynote here). It was powerful, insightful, and not ashamed to point fingers. The other day, I found a video on Youtube of a similar talk by Uncle Bob here, and I felt compelled to spread the word about his message, even more relevant in 2019.

The overarching theme of the talk was the history of computers, from the “beginning” to the present, but also who was designing them and programming them, how that was done, and how all of those changed over time, for better or worse. He also does an interesting approximation of the number of computers and number of developers through the years.

Continue reading

I ended up talking about knowledge management quite a bit at Agile Games 2018 and Mob Programming 2018.  I don’t have a lot of formal training in this area, but it’s something that I’ve focused on a lot, and I’ve learned a lot from people who have studied it a great deal.  Rather than respond directly, I decided to add a blog post about it, to benefit more people.  This is an unordered list of these tips.  I would love to hear your additions or feedback on it.

Push vs Pull Communication Channels

There are two different general ways of communicating information: Push and Pull.  Push is when you send information out to recipients and they get notified (email, Twitter, Slack, etc) and Pull is when the recipient seeks out that information that was published earlier (Website, wiki, CMS, documentation).  Using the wrong type can prevent the recipients from having the most recent information in a timely manner.  The main deciding factor is, is it more important that people know about this information as soon as possible (changes to policy, status/availability updates, issues), or that people have the information when they need it (requirements, specifications, resources, environment details).  Many tools can do both, like wikis, which allow people to get notified of updates).  Email doesn’t work nearly as well as you would think at either push or pull, because most people in technical fields get so many emails that they find it hard to both notice and respond to timely emails and categorize those emails so they can find them later.Continue reading


Since I’m in Boston, we have a lot of snow to deal with this winter.  The other day I was clearing snow off my roof with a roof rake, and after about an hour for some reason it started pulling to the left when I pulled straight down.  I started to compensate by pulling the roof rake more to the right to compensate, but that didn’t really help much.  After finally getting frustrated enough to pull the roof rake down and look at it, I saw that one of the support brackets was no longer screwed to the rake, so the blade was unsupported on that side.  That’s why the rake was pulling to the left.  Had I looked at the rake as soon as I noticed the problem, I would have saved a lot of frustration, and possible permanent damage to the roof rake.  I fee we do the same thing with our software tools a lot.

Very often I’ve seen software where the usual reaction to compilation warnings is to tell the compiler to ignore them.  There are times when this is appropriate.  My favorite example of this is with Java Generics, where it’s very hard to get around some of the warnings for things that you and I know are perfectly safe.  Most of the time, though, compiler warnings are indicating a moderate to serious problem, or at least an area where the program might not be doing what you think it is.  Eliminating those warnings is an excellent collaborative activity, because we all have experience with different software issues.

So the next time you feel tempted to “ignore the Check Engine” light, spend some time finding out if there’s a more elegant solution than putting tape over it.


I have been an early adopter for many electronic devices, especially mobile ones. I’ve had the dream of walking around with some sort of computing device, ideally connected to the Internet, much longer than it’s been practical.  I went through the HP100LX (which I could hook up to my Motorola Startac phone or my 300 baud modem), the Sharp Zaurus SL-5500 (which ran Linux), and the Psion 5MX.  Then some Palm PDAs, etc.  Unfortunately, the PDA market is pretty much dead.  I really wish I knew why, as it was years between when the PDA market vanished (at least here in the US) and when smartphones became capable of taking their place.

My first smartphone was a Windows Mobile 6.0 phone (bought months before Microsoft declared Windows Mobile 6.x an utter dead end), and eventually an iPhone.  But not the first iPhone.  Or even the second iPhone.  Why?  Because, as groundbreaking and powerful as they were, my research determined they were missing certain key features that I needed to do what I want, and being a relatively closed and restricted environment, those features were not going to be added on by someone else.  I did my research, and said “Not soup yet”.  How do you release a device you say surpasses anything else without cut/copy/paste??!?!?  I am very much NOT an Apple Fanboy, but why, being a Linux Fanboy, would I not go with an Android phone?  because (1) At least at the time, you couldn’t back up or sync any data with an Android phone without surrendering all your contacts, schedule, etc with Google, which is an unacceptable privacy violation to me, and (2) AT&T had modified the phones to be even more locked down than the iPhone!!!  But I wold not have known that if I just simply said “The Linux-based phone must be more open, so let me get that one”.

When the Kindle Fire was announced, I started thinking about getting that device, or something like it (7″ form factor Android device around $200 with a high quality display).  Days later the Barnes and Noble Nook Tablet was announce to be available for sale a week after the Kindle Fire, and I quickly narrowed down my choices to these two.  But the rumors and predicted specs on review sites differed enough I knew I had to wait until they were available and I could play with them.  I ended up developing a detailed, objective comparison between them, and the Nook Tablet won handily (for me. YMMV).  I got active in the Nook Tablet “hacking” community, and even started working on a wiki site on it. My research found that the boot loader was heavily locked down, and while there’s a lot of hacks to load other software and markets and customizations for it, it’s unlikely that a completely new ROM would be loaded on it any time soon.  I was OK with that, because while I wanted to do much more than originally intended with the device, I still wanted it to function as an ereader, too,

I noticed, long after the word had spread that you couldn’t [yet] replace the ROM as you could in its predecessor, that people were buying them and discovering this after the fact, and returning them.  These people had bought this device for $250 or more hoping to load the latest version of AndroidOS on it, use bluetooth keyboards, hook up external hard drives to it, and Skype their friends with it, without spending half an hour finding out whether any of this is possible (none of it is yet, though Ice Cream Sandwich is close)!

This leads to unhappy geeks.  Geeks and hackers, as a group, tend to expect the world to work they way they want it to, or at least be configurable to.  Only big corporations aren’t always on board with this.  In the case of the Nook Tablet, B&N had to lock the tablet down more than its predecessor in order for Netflix to allow streaming on it.  After the security vulnerabilities came out that allowed us to gain root access to the Nook Tablet and load software from wherever we wanted on it, B&N pushed an update to the software that closed those security holes, and that update got installed on Tablets with no warning, and certainly without consent.  There was an endless barrage of flame wars complaining that B&N should not have done that, and “how dare they”.  I would calmly point out each time that B&N was operating in their own best interests (protecting their relationship with Netflix and other companies), and it’s silly and unrealistic to expect B&N to act against their own best interest to enable a small group of people who will never buy books, movies, or apps from B&N to have their fun, any more that one would expect Apple to allow Adobe Flash on the iPhone or Ford to allow you to connect your computer to the diagnostic interface of their cars with a simple USB plug.

So here’s my message: When you’re planning on buying some sort of complicated and/or expensive item:

  1. Make sure you’ve identified exactly what you want to do with it (establish acceptance criteria).  This not only helps you with your research, and help determine when you’re done with it, but it can prevent you from falsely claiming you’ve found “the perfect solution” if you really haven’t.  It also helps convey to others what you’re looking for.  Be honest with yourself.
  2. Make sure you’ve made a reasonable effort to identify all possible items that could meet your needs.  “Premature optimization and/or filtering” can lead to excessive narrowing of the result set.
  3. Make sure you look at both the good and bad features of each item, identifying any deal-breakers.
  4. If you absolutely need a feature, and the device doesn’t have it yet, don’t assume that it will be added in the near future, or ever.  Even barring external influences like regulations and partnerships, their idea of the future of the device may be very different than your own.
  5. If you can afford to wait even a week later, you will benefit from the experience of the others who were not so thorough.  Learning from other peoples’ mistakes is much cheaper than learning from your own.  Learning from other peoples’ successes can save you hour of research.
  6. If you can’t find evidence either way whether the device can do what you want it to or not, don’t be afraid to ask.  And ideally, spread the new knowledge.

I have to admit when I first experienced Adobe Flex, the successor to Adobe Flash for rich internet application development, I thought it was a fragile toy that wasn’t good for much more than pretty moving pictures.  At my current day job, I had to not only learn it, but spend about half my time working in it (as opposed to my current favorite language, Java).  One thing I’ve learned from the experience is that it wasn’t so much Flex that I had a problem with, as much as Flex Developers.  The Flex developers I’ve worked with up until this job came to Flex from being Illustrators, Graphic Artists, or just kinda fell into it.  They never learned the art of software development, never learned to appreciate best practices, and never learned to value code quality or readability.  But as a long-time Software Engineer, I know you can create bad software in any language.  But now I’ve spent about 10 months working in Flex, and feel I can opine fairly.Continue reading


“Give Me Liberty And Give Me Bugs” is a quote by Martin Owens, leader of Ubuntu Massachusetts and fellow BLU (Boston Linux and UNIX Group) member.  You see, it all started innocently enough with a thread on the BLU list about the iPad.  The flames hadn’t actually reached the second floor yet, so I decided to squirt some napalm on it by mentioning that (1) I just bought an iPhone to replace my dead-end Windows Mobile phone, and (2) I have given up on trying to sync music and PDA data with Linux, and am now using an old beater Windows XP laptop just for syncing and backing up my phone.  You see, I’m a PDA geek.  I track lots of metadata about my calendar events, contact data, tasks, etc.  Since the PDA as a separate device is pretty much dead at this point (s0b) I rely on finding third party software for my phone.

But back to the argument.  There were two dominant camps.

  1. Those that see any vendor lock-in techniques, DRM, planned obsolescence, and anything that prevent you from doing whatever you want with something you own, as an affront to nature, and should be illegal.  They would rather have Open Source/unencumbered products that didn’t quite work right than locked-down commercial products that work very well, but only in the One True Way as determined by the vendor.
  2. Those that see companies as entities that will generally focus on their own goals, charging as much as they can get away with for as little as they can get away with, targeting their products towards the target audience they choose.  They feel to expect otherwise is being idealistic.  One should act accordingly, and not act shocked when Apple releases a new version five months after you buy one.

Continue reading