Category Archives: Uncategorized

Outsmarting yourself. The dangers of techie dogma.

Some recent events have led me to reconsider my early programming days. Only a few years in but with thousands of hours and 10s of thousands of lines of code under my belt I was beginning to feel pretty confident. I had a very lucrative gig and after a few rounds of layoffs my team was efficient and savvy. This was the late 90s mind you, and during that time J2EE had bubbled up as an industry standard. We were a creative bunch and after some strategic pruning we were finally producing pretty robust solutions. I had personally discovered Java reflection and was having a blast exploring the possibilities. When I declared in a team meeting that all of our web forms could “build themselves” it took about 30 minutes to dispel the skepticism and decide on a course of action. Remember, this was the 90s, forms must be statically and manually coded in HTML. The word “dynamic” was only just getting the attention it deserved.

It worked like a charm. Java is a strictly typed language, and every data type has a logical form control equivalent. Boolean could be a checkbox, strings a text field. We could even inspect the property max size and constrain the form field accordingly! Again, I must remind you that this was the 90s, nowadays this is a no brainer. Back then it was “pie in the sky”.

Our team got a lot of attention even before our modules were going live. I personally got to demo the usage pattern and experienced (or imagined) a collective wow from the group. It’s pretty amazing to change a data-type and see the input control change immediately on the form to accommodate it without any extra code and virtually no static HTML!

As you might imagine things were going to take a turn, and in this case the turn came when the team lead from a different group rejected our request that he provide getters (the J2EE convention for a method that retrieves the value of an internal property/variable) for all of his object properties. His claim? He could only provide getters for non-boolean data types as the standard convention was to use “is” for booleans. I thought it would be simple, satisfy the convention but also provide a getter so that we could accurately inspect the object. No dice. The discussion went all the way up to executive (and non-technical) staff where this guy referred to me and my team as “hacks” for wanting to violate the sacred convention.

Now’s a good time for a break from the techno-babble. I like to drive as fast as I can while still being safe and not damaging my vehicle. I’m sure I’m not the only one. Yet each person has their own interpretation of what exactly is “safe”. Conventions are great, in that they help us to make fairly predictable decisions. Now some people may call speed limits a “rule” and in a certain context they’d be correct. Yet, technically speaking a speed limit is not a “rule” it is more like a convention. If it were a “rule” in a programming sense then roads simply could not support speeds higher than the limit. Cars would never be capable of exceeding the limit. They wouldn’t break, they just couldn’t do it. Yet, as a convention, the possibility exists for stretching it and bending it. Every-so-often a cop comes along and writes you up because your notion didn’t match his. He wins, cause he’s the cop. Yet in programming world, when two equal team leads from different teams clash, the only cops are non-technical management. Back to the story…

The case was run almost like a jury trial. We both brought witnesses from our different teams and laid out the evidence. Long story short, I lost. The phrase “non-standard” being parroted in nearly every sentence coming from their side and at one point the claim was even made that aliasing the functions would break existing deployments. That of course was a blatant lie. Extending an object’s capabilities by adding a method alias really has no such potential. In fact in counter arguments I referred to these supposed bugs as “regression” only to be met with a spew of criticism that the term should be “ripple effect” not “regression”… Things were really getting ugly. So I bailed. Good thing too, the whole project dissolved in a matter of weeks.

Nowadays “convention over configuration” attempts to remove the developer’s brain from the equation by pre-deciding as many things as possible as a matter of convention. Ironically the same brain must then be used to remember all of the said conventions. The fact is, conventions are good. When firmly applied they work wonders at keeping code consistent. When applied strictly they become as impractical as a cop pulling over an ambulance carrying a cardiac arrest victim for speeding.

In training and teaching I’ve always tried to emphasize the need to think for ourselves. Freezing like a deer in the headlights whenever the speedometer hits 56 mph is not just bad, it’s dangerous! I won’t be so dogmatic as to reject all conventions, standards, acronyms, and whatever else someone decides to brand and market. I just warn you, don’t be so dogmatic as to reject thought. It is a necessary component of a successful project.

2 Issues

2 issues have come to our attention:

Firstly, complaints about valid comments not being released. This site receives hundreds of spam comments per day, and thankfully only a few make it through our filters. Of those hundreds, there are dozens that are entered manually and get queued for moderation. We have honestly just been too busy to weed through and had often opted to just wipe them out. If you have been a victim of this, please accept our sincere apologies and realize it is nothing personal.

Secondly, the number of compromise attempts of our site has risen since our private client blog got mentioned in a publication. The content in the REDACTED article is the only content we authorized release of, and the only content that will be released. Feel free to continue to probe our site, you’ll not get far. In fact, your visits to several of our honeypot areas are helping us build yet another product. In other words, give it up et al. We know you’re there, we just don’t really care enough to block you.


Remembering 9/11

This morning Barack Obama quoted Psalm 46 verbatim. No interpretation, no opinion, just the words of the Bible:

1 God is our refuge and strength, 
   an ever-present help in trouble. 
2 Therefore we will not fear, though the earth give way 
   and the mountains fall into the heart of the sea, 
3 though its waters roar and foam 
   and the mountains quake with their surging.

 4 There is a river whose streams make glad the city of God, 
   the holy place where the Most High dwells. 
5 God is within her, she will not fall; 
   God will help her at break of day. 
6 Nations are in uproar, kingdoms fall; 
   he lifts his voice, the earth melts.

 7 The LORD Almighty is with us; 
   the God of Jacob is our fortress.

 8 Come and see what the LORD has done, 
   the desolations he has brought on the earth. 
9 He makes wars cease 
   to the ends of the earth. 
He breaks the bow and shatters the spear; 
   he burns the shields[d] with fire. 
10 He says, “Be still, and know that I am God; 
   I will be exalted among the nations, 
   I will be exalted in the earth.”

Thank you Mr. President for bringing pure hope and comfort today. We will never forget 9/11 and what it means. When our nation is blessed we will be hated by evil people. Just as Israel was blessed by God, so has America been. Just as the evil have hated Israel so have they hated America. Yet we continue to be blessed.

As verse 2 above mentions, those evil people have tried to make us fear, but we will not fear. We also should not allow this to make us evil, or lead us to become self-absorbed. As the Canadian journalist Gordon Sinclair proclaimed nearly 40 years ago (speaking of events beginning even 60 years prior) may we continue to be “the most generous and possibly the least-appreciated people in all the earth.”

God Bless America!