Updates from December, 2008 Toggle Comment Threads | Keyboard Shortcuts

  • Michael Krakovskiy 3:26 am on December 10, 2008 Permalink | Reply
    Tags: Danish design, , early Internet literature, Harold Kroto, Ian Bank, Lego, ,   

    The Problem With Code Reuse and Abstraction 

    Currently I am neck deep in some multi-layered multi-moduled code that I inherited from some consultants. Younger developers who work with me are also upset with the convolutions, but they are convinced that their way of snapping together Lego blocks is vastly superior and much more maintainable. Just like the consultants though they believe that the more modular, abstract and generic they make their code – the better it is, even if they are building a one-off super specific application. Modularity and code reuse is their number one priority, only then followed by performance, brevity, and lack of bugs.

    Development frameworks and code reuse that they promote seem to the the way things are going these days. I was reminded of this trend when I was reading this passage in Ian Bank’s “The Bridge” today:

    “”Are there laws against what they did?”
    “There’s no law to permit it, Orr, that’s the point. Good grief man, you can’t have people going off and doing things just because they want to, just because they think something up! You have to have a… a framework””

    Don’t get me wrong, I am all for code reuse, abstractions and other such fineries. It’s just that I tend to look at certain tasks and think – there’s a piece of custom code needed here! The younger developers always look at me with great disapproval and tell me that I should use module X or Y, or how they are working on a module that will cover all problems of this kind in a generic way.

    Today I came upon a perfect metaphor for such thinking. Apparently it originated from an origami forum, but it seems to me I encountered it in Fidonet signature years ago. In any case, the quote goes like this:

    “An elephant consists of a trunk, ears, and a hippopotamus”.

    When you are building things out of Lego blocks, you must fight the temptation to substitute a hippo for the starting point of an elephant. It looks like Lego did mess up the young minds just the way Sir Harold Kroto said when he delivered a crotch punch to the Lego sales:

    “New toys (mainly Lego) have led to the extinction of Meccano and this has been a major disaster as far as the education of our young engineers and scientists is concerned. Lego is a technically trivial plaything and kids love it partly because it is so simple and partly because it is seductively coloured. However it is only a toy, whereas Meccano is a real engineering kit and it teaches one skill which I consider to be the most important that anyone can acquire: This is the sensitive touch needed to thread a nut on a bolt and tighten them with a screwdriver and spanner just enough that they stay locked, but not so tightly that the thread is stripped or they cannot be unscrewed.”

    If I knew about some of the things that were lurking in the codebase I’m working with now, I’d work something like this into my hiring contract:

    “In April of 2000 while on a business trip I received a near-frantic email from someone with an unusual request. It seems that she represented a fellow with a company in Seattle (no, NOT Microsoft). Turns out that last September this guy was hired, and in his contract of employment it stipulated that he wanted a desk made out of LEGO.”

    Sometimes I am also reminded of other classics of early Internet literature.

  • Michael Krakovskiy 8:56 am on October 23, 2008 Permalink | Reply
    Tags: Closure, Common Lisp Object System, , , , Lisp programming language,   


    Since closures are the hottest thing in computer programming these days, I ordered a whole box of them:

    I am still waiting for that box of lisp parens.

  • Michael Krakovskiy 1:02 pm on June 20, 2008 Permalink | Reply
    Tags: armchair software architecture, , content management system, Create, , Crud, , , , Major, , month old technology, Rails falls, read, , Ruby on Rails, , social networking tool, , software application, software craptitechts, , , update and delete, , , web interfaces, web technologies, ,   

    CRUD Ain’t Hard 

    And now for a little exercise in armchair software architecture — the most despicable coder’s pastime. Dear non-coding readers: despite its name, this blog is still mostly not about programming. Just skip this post or something. Dear coders, many of you will probably disagree with me. I am not a very good or accomplished coder myself, and you probably should not be taking your advice from me. But then again, I could be right, so keep your mind open.

    You might have been aware of the very popular, but uptime-challenged social networking tool called Twitter. They have one of the best problems to have: too many very active users. The site is so popular that it constantly goes down and displays and “over capacity” screen that the users have nicknamed The Fail Whale.

    Rapidly writing and displaying short chunks of text with high concurrency on the web is not one of them unsolvable problems in programming. It’s not easy, but with right people and tools Twitter could be rewritten inside a month. Twitter founders should do some soul searching. Meanwhile the critical mass has already been reached, the niche for bloggers who want to SMS instead of blogging is big, and even horrible uptime can’t this service. I use it myself.

    There is a lot of speculation in the blogocube about whether the reason behind the Fail Whale is the wrong choice of technology — the highly hyped and sexy Ruby on Rails and if it can “scale”. Or is it just simple incompetence?

    To me Ruby on Rails falls into a class of technologies that are affected by what I call “the VRML syndrome.” Basically, if I wait long enough the hype will go away, the recruiters will stop posting job listings requiring 4 years of experience in a 4 month old technology, books as fat as my two fists will stop being published, and I will not have to learn it.

    What’s the problem with Ruby on Rails? Well, it’s the same problem that slightly affects the content management system that I am currently working with (Drupal), and is the reason why I completely gave up using Microsoft web technologies which are saturated with this shit. See, software craptitechts all of a sudden decided that writing CRUD applications is too difficult for regular developers, and complicated GUI tools and frameworks need to be created to help the poor things. CRUD stands for “Create, Read, Update, Delete” and is just a funny way to say “a browser-based application chock-full’o forms”.

    The default way to build these is to rather simple. You hand-code the html forms, then you write functions or classes to deal with the form input — validators and SQL queries for creating, updating and deleting. Then you write some code that will query the database and display the saved data in various ways: as pages, xml feeds, etc. None of this is difficult or non-trivial. Bad coders don’t do a good job of validation and input sanitizing resulting in the Little Bobby Tables-type situation, but these things are not very hard to learn and there are great libraries for this.

    Ruby on Rails makes it very easy to create CRUD apps without hand-coding forms or writing SQL. RoR goes to great lengths to abstract out SQL, not trusting the developers to do it right. SQL is more functional than procedural, and thus a difficult thing for many programmers to grasp, but it’s not that hard. Really. SQL is located far enough levels from the machine that abstracting it out becomes a horrible thing due to the Law of Leaky Abstractions. Even when you have full control of SQL queries optimizing them is sometimes hard. When they are hidden by another layer it becomes next to impossible.

    In short, RoR makes something that is easy (building CRUD apps) trivial, and something that’s hard – optimizing the database layer next to impossible.

    In Drupal there are two modules, CCK and Views that allow you to create CRUD entirely through web interfaces. This is a feature that exist in just about every major CMS, it’s just that in Drupal it’s a little buggier and overcomplicated than necessary. These are fine for small websites and are really useful to amateurs. The problem arises when these are used for high traffic websites.

    I think that a lot of people will agree with me that writing HTML and SQL queries using GUI tools is amateur hour. You just can’t make a good website with Microsoft Front Page. You can’t, you can’t, you can’t. But in Drupalland it’s all of a sudden fine to use Views to build queries for high traffic sites. Well, it’s not. Dealing with Views and Views Fast Search has been an ongoing nightmare for me. Hell is not even other people’s code in this case. It’s other people’s Views.

    RoR, Views, CCK are one level of abstraction higher than you want to be when building a high performance application. The only way the can be an “Enterprise” tool if your enterprise is a) run by a morons that require 100 changes a day AND b) has very few users. In short, if it’s an app for the HR department of a company with 12 employees – knock yourself out. If you are building a public website for millions of people – forget about it.

    Your, Deadprogrammer.

    P.S. Yes, I know, you can abstract just about everything and reduce your software application to a single button labled “GENERATE MONEY”. You have to be a very smart LISP developer for that.

compose new post
next post/next comment
previous post/previous comment
show/hide comments
go to top
go to login
show/hide help
shift + esc