Obviously there is a point where the cost of looking into the black box exceeds the benefit of doing so. If you rarely use the black box, then there is little if any point in investigating how it works, and as you say this point is all the more true if you have access to people who do understand its innards when you get stuck on some bizzare boundary issue.

However, when one uses a tool regularly I believe the benefit of learning the basics of how it works far exceed the costs. Databases are a good example. Most programmers end up having to regularly use some form of relational database. Yet I think a lot refuse to learn even the rudiments of the principles of its operation. This to me is just plain silly. Its not just a matter of dealing with obscure problems, but rather of a more holistic approach. Understanding a bit of how referential integrity works, how indexes work can and should be a guiding force in how you design queries, how you design table relationships, etc. Consider that fully normalizing a database is good for RI purposes but may be very bad for performance as it will typically mean far more joins to get the same data. And as a joins cost increases with the size of data involved this can be a very bad design decision despite its academic idealness.

A different example would be filesystems on your favourite operating system. A programmer will be using and interacting with the filesystem in just about every program they write. Understanding the basics of how a filesystem works enables the programmer to make basic design decisions that in the long term pay off big time. For instance consider the three level directory structure in CPAN. Originally this structure was not employed, however had the programmers considered the scaling potential of CPAN in conjunction with the scaling properties of a flat directory structure they would have avoided the considerable effort required to restructure the data mid way. Im fairly sure that the programmers knew both points, but I suspect that the black box mentality was at least in part behind them not making the connection between the two.

So i guess my point is that if you use a black box regularly you need to apply some kind of multiplier to the immediate benefit you gain from the investigation before considering the cost. Doing your homework earlier will help avoid costly and time consuming changes later.


---
demerphq

    First they ignore you, then they laugh at you, then they fight you, then you win.
    -- Gandhi



In reply to Re^2: Bitten by the worst case (or why it pays to know whats inside the black box) by demerphq
in thread Bitten by the worst case (or why it pays to know whats inside the black box) by demerphq

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.