PITADEV
Curiosity killed the developer's project.

Developer Jargon

Saturday, 14 February 2009 08:17 by aj

With some amusement and a good chunk of confusion, I've been following the ongoing debate between Jeff Atwood/Joel Spolsky and Uncle Bob Martin.  I won't bother detailing the argument; if anyone reads this blog, they probably are already aware of the salvos launched by each faction (I ran out of words for the last link).  My befuddlement stems from the fact that the two sides really aren't that far apart.  It seems to me that it would be rash to say that either Atwood or Spolsky completely believes that proposed guidelines like Uncle Bob's SOLID principles are a bad idea.  And I'm fairly certain that Uncle Bob has respect for the idea that the Liskov Substitution Principle might be a little hefty for a novice developer to understand in their first years in the market.  After listening to Hanselman's podcast with Bob Martin on SOLID, I am convinced that Mr. Martin, though he completely stands by his guidelines, is aware of the complexity that these principles present at first blush.  The main similarity between the two arguments is that both Atwood (Spolsky has kind of ducked out of it, and I don't blame him) and Martin are going about laying out rules for developers the wrong way.

Atwood maintains that " Throwing a book of rules at a terrible programmer just creates a terrible programmer with a bruise on their head where the book bounced off."  And I agree with him.  There are, unfortunately, a lot of terrible programmers out there polluting our sacred pool.  But, there are even more programmers that don't have time to pay attention to blogs, read "seminal" books on design patterns and programming theory, and prototype all of the hot new ideas as they come out.  I've only started getting into NHibernate, even though ORM's have been around for years, and I don't count myself in the ranks of "terrible programmers."  To be frank, I just haven't had time to learn about it.  And I've found that a lot of programmers are like me, they don't have time either.

I have a colleague that is busier than I am.  He doesn't read blogs, doesn't go to trade shows or user groups, doesn't read books, but he's still a good developer.  And he wants to learn, it just doesn't always fit into his schedule.  As we have worked together, I've come to realize that one of the biggest barriers that he faces consists of the large wall created by acronyms, buzz words, and high-brow conceptual language that make no sense until you have a chunk of time to study them.

Software development is a complex science, without a doubt.  But when we create jargon to appease our programming nobility, we not only make it difficult to sell new ideas to the managers and decision-makers in our enterprises (not all of us have the good fortune to run their own company or work for software companies), we also create knowledge obstacles for the programming bourgeoisie. Ninety-eight percent of the development work-force does not have time to keep up with SOLID, TDD, FDD, DDD, ORM, DRY, YAGNI, AJAX, MVC, MVP, Agile, XP, RAD, MEF, Clouds, WPF, WCF, WF, ECM, NAMBLA, POTUS and WTF.  My colleague may have been creating class instances dynamically for years without knowing that he's been using the Factory Pattern the whole time.  He knows what works, what's fast, and what's scalable and easily maintainable, and frankly, he doesn't give a flying fuck about patterns and practices and principles and acronyms.

As a lead developer, I very much am concerned with patterns and practices.  But my main concern at this point is not keeping abreast with the latest theories, its finding out what works for our enterprise and figuring out how to help my peers understand why they should use it.  And in this effort, I have found that buzz words and acronyms don't do me a lick of good.  What does?  Easy-to-use documentation and code samples.  That, my friends, is how you sell software developing ideas. 

So it was quite amusing to me that Jeff's rebuttal to Uncle Bob was yet another set of acronyms, even if they stand for very simple concepts.  A lot of these terms make sense to me because I've taken the time to study them.  Terrible developers are staying terrible because the nobility has stopped talking to them.  They are too busy talking among themselves in a jargon that few others have the time or inclination to understand.  Keep it up, guys.  I'll keep trying to edit and translate.  

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

The Myth of OOTB (Part 1-The Rant)

Tuesday, 11 November 2008 18:42 by aj

Author/Editor Note: Originally, I thought this post would stand on its own. But after reading it again, it's become apparent to me that this is more of a rant than anything useful.  I will be writing follow ups in the future on the OOTB Compromise and vetting OOTB products.

A while ago, my cube-mate at work (we have double-cubes that make us feel all the more disrespected, even though I like my cube-mate) was forced to devote all of his time to building an application with an "out-of-the-box" piece of vendor software.  A few months earlier, he had received a bonus for "Technical Innovation," rewarding him for an excellent framework he had written to update the way we retrieved content from our ECM system. I called him "The Innovator."  Working on this new application, he became "OOTB" (pronounced ootbah).

Life was difficult for OOTB.  The project suffered from massive scope-creep, and the project manager had consistent problems communicating requirements, which often forced OOTB to have to redo pieces of the solution.  But the biggest obstacle was the vendor software itself.  Its intent was to provide a simple way to organize a Java-driven UI sitting on top of a business process workflow.  The workflow processes "cases," which are comprised of faxed documents for various transactions.  The basic concept is good: map UI controls to fields and decisions in the underlying workflow.  The implementation is sorely lacking.  Rather than a WYSIWYG editor, the vendor offers an MMC snap-in with loads of configuration requirements.  All of this configuration information is ultimately saved to a "metastore," which manifests in a convoluted Oracle database.  In order to make the workflow information available to the MMC snap-in you have to run an import utility; essentially an open file dialog with an "Import" button.  To operate on different deployment environments (Dev, Integration Testing, User Acceptance, Production), you have to manipulate (manually) a series of registry keys.  I can go on and on.  The bottom line is that the end-user functionality of this software is laughable.

OOTB attempted to put a good face on this, but kept running into fundamental design flaws, along with plenty of niggling little problems that drove him nuts.  He stopped shaving and started listening to old Slayer albums all the time.  He worked long hours attempting to configure user-interface functionality that would have taken him a fraction of the time in ASPX pages.  The client continued to throw curve balls, and OOTB kept having to stretch into more ridiculous positions to catch each wild pitch.  In the midst of it all, on his own time, he designed a beautiful framework that would have allowed the entire system to be coded and deployed in very little time, compared to the several-hour-long deployments he faced with every design change.  I'm pretty sure that the time he took to architect this framework kept him from killing someone.

Months have gone by, and through some magnificent mystery of corporate reorganization, I have become OOTB.  I inherited this project.  Having heard all of Original OOTB's complaints, I embarked on the project with a "C'mon, it can't be that bad" mentality.  Oh it was, and still is, that bad.  I've grown a big, bushy beard and spend my days listening to music that would make grandma cry.  But, instead of doing something productive, like design a framework for the way this thing should work, I'm writing this post instead.

As a developer, I can't count the number of times I've been asked by my higher-ups to look at a piece of software that is supposed to solve all of our problems with out-of-the-box functionality.  This amuses the hell out of me, since I'd be out of a job if these things actually lived up to their marketing.  Think of a world where software developers dance on the streets with organ-grinders, where monkeys wear business casual and spend their days pointing and clicking and dragging and dropping.  This will never happen, of course.  Not because all of us developers would get jobs making the OOTB software, but more because every time I've been asked to evaluate OOTB software, it never does everything we need it to do.  Some vendors promise improved functionality in future releases, others ignore you or look at you like you're crazy.  Some are smart enough to offer good APIs, others go so far as to sell you their source code.  No matter what, good software companies realize that they can never offer everybody everything they want, and good software companies realize that they must, somehow, give the users what they want.

The frustration for management-types that are trying to trim their budget fat is that they don't understand why we need all of these developers around.  "Why can't we just buy some software and hire some hourly people to do this instead of paying x developers y salary?"  Developers are the first people they target.  We're socially awkward, expensive, demanding pains-in-the-company-ass, and it's very, very simple to see us as overhead.  Vendors market their software as magic programmer bullets, and with this viewpoint in mind, it's easy to see why management might be quick to sign the purchase agreement.

A good application development team understands that repeated tasks should be consolidated into reusable code.  This takes more time up front, but saves gobs of code in the long run.  When OOTB software is brought in, there's a pretty nasty honeymoon as well, what with installing, distributing, and learning to use the software.  In the end, a well-designed, custom-coded solution is going to serve the enterprise better 100% of the time, because it directly addresses the needs of the business.  The OOTB software may make it easier to set up 95% of a solution, but I tell you, that remaining 5% is going to slaughter your bottom line.  So, in the end, why do enterprises sink so much money and time into pushing square blocks through round holes?

Probably because OOTB stopped wearing deoderant.

Coming soon: The OOTB Compromise.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:  
Categories:   Dev Theory | Rants
Actions:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

[esc]1GAvi, the web, HTML, script, and content[esc]

Thursday, 11 September 2008 15:39 by kevin

(hint: á a vi keystroke sequence)

 Just a sort of random thought that's been brewing in the back of my mind for a while, and exacerbated by playing with the editor built into this blog: it's a bad thing that we need to sanitize user inputs to make sure they're not malicious HTML or script.  It's a bad thing that thousands of projects and millions of web developers have to even think about this.  It's an unconscionable drag on productivity.

Possible solutions:

1)  create a post-spammer, post-troll utopia where no one even wants to enter malicious text into the entry boxes.

2)  differentiate markup and code from content.

Considering the amount of work that's gone into the Web as we know it, #2's not a likely option, so we're stuck with #1.

Seriously,  I'm sure somebody could come up with a reason why this wouldn't work, or would be counterproductive -- it literally is something I just thought of -- but it seems to me there ought to be a better way. If it wasn't clear from the title, my model is vi. (For the uninitiated) it centers on a very basic idea: different modes for commands and content.  Typing "G" in text mode gives you the letter "G".  Hitting "G" in command mode brings you to the bottom of the file/buffer.  "4x" in command mode will delete the next 4 characters after your current cursor location.  There are many keystrokes that will put you into text mode, but only one (AFAIK) that will put you into command mode (ESC).

So, wouldn't it be nice if you could count on a "<script>SendInfoToEvilPerson(document.cookie)</script>" rendering as text content, and not executing as a script?  Should this really be so hard?  Discuss.

 Update: Ugh.  Tags: "Vi" and "Xss"?  (I typed in "vi,XSS")  Ugh.  I mean, I like case-insensitivity as much as the next guy, but saying that searching for "VI" should return a match with "vi" isn't the same as saying that any rendering of these terms is as good as any other (if you click the tags, you'll see that the URL has them in all lower case, which would honestly be much better than "proper case" for both of these terms).  Kind of weird, coming from a blogging tool by programmers, and probably mostly for programmers.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   ,
Categories:   Dev Theory | Rants
Actions:   E-mail | del.icio.us | Permalink | Comments (2) | Comment RSSRSS comment feed