Keeping it Simple



  • I'm a hack looking for a new job.  Hack that I am, even I know that simplicity is a laudable goal in software development.  I was quite amused to see one poster proudly declare, "Our software is among the most complex ever created".  That is some accomplishment!  Not sure how long google cache link will last.

    This brings to mind some quotes from a couple luminaries:

    • UNIX is simple.  It just takes a genius to understand its simplicity - Dennis Ritchie
    • There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies. - C.A.R. Hoare
    • Increasingly, people seem to misinterpret complexity as sophistication, which is baffling---the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user. - Niklaus Wirth
    • The belief that complex systems require armies of designers and programmers is wrong. A system that is not understood in its entirety, or at least to a significant degree of detail by a single individual, should probably not be built. - Niklaus Wirth
    • Inside every large program, there is a small program trying to get out.  - C.A.R. Hoare

    I can imagine the laughter that would generated if I included as a bullet point on my resume, "My software is among the most complex ever created".



  • from the job spec:".... Scrum development methodology ...". when I first heard about this some weeks ago I thought it's a typo and somebody accidentally put a "r" in it. All these buzzwords, what a pile of p00.



  • Isn't scrum supposed to be a component of agile development, not a "methodology" of its own? From what I've seen of agile development so far, scrum is the only worthwhile part because it's the closest you get to having a plan.



  • @bwood said:

    • UNIX is simple.  It just takes a genius to understand its simplicity - Dennis Ritchie

    I've been working with unix systems for over a decade, and I'm only just beginning to understand the truth of this statement. It has a zenlike deceptiveness about it, and is itself an example of what it describes. There is far more in those few words than is initially apparent.

    It is not a coincidence that there is precisely one operating system concept that has survived in mainstream use for several decades.



  • @bwood said:

    I can imagine the laughter that would generated if I included as a bullet point on my resume, "My software is among the most complex ever created".

    You'd have hiring managers knocking down your door. There are far more developers and managers who smile upon that bullet point than there are who revile it.

    Personally, if I were a hiring manager, I'd ask if you can start Monday. I sure wish I worked with more people who understood K.I.S.S.



  • SCRUM is Agile development methodologies translated into the management space.



  • @asuffield said:

    It is not a coincidence that there is precisely one operating system concept that has survived in mainstream use for several decades.

    And that would be the IBM System/360, wouldn't it? Programs written in 1964 for the Mod 30 will run unchanged on a z series today (timing excepted). Don't think the Big Iron has gone away just because it gets no publicity.



  • @GreyWolf said:

    @asuffield said:

    It is not a coincidence that there is precisely one operating system concept that has survived in mainstream use for several decades.

    And that would be the IBM System/360, wouldn't it?

    Not in mainstream use. There's about two or three things which have been around that long in the specialist market, with s/3x0 being the most notable, closely followed by vxworks.



  • What an absurd job description. After reading through it, my understanding of the position was actually lower than before I started!

    I especially liked this snippet.

    "...creation and management of an inventory of responses to proposal questions that will be available for future proposal response..."


    So.... in other, simpler, words, "write a FAQ"? 



  • @GreyWolf said:

    @asuffield said:

    It is not a coincidence that there is precisely one operating system concept that has survived in mainstream use for several decades.

    And that would be the IBM System/360, wouldn't it? Programs written in 1964 for the Mod 30 will run unchanged on a z series today (timing excepted). Don't think the Big Iron has gone away just because it gets no publicity.

    How about the concept of HAVING an Operating System? That's older than any specific system. Of course there is the question of whether that qualifies as an 'operating system concept', or merely a computer concept, in which case it's predated by, for example, programmability (which might be said to be the DEFINING characteristic of a 'computer').



  • Real production systems that do useful work usually [I]are[/I] complex, because they support processes that are complex and often not clearly defined.<hints id="hah_hints"></hints>

    There are plenty of trivially simple, single-purpose toy apps out there that work correctly precisely because they're so trivially simple.  However, some things can't be simplified to such an extent, and trying to do so can produce some truly awful results.

    Bubble sort is simple.  Quick sort and merge sort are both complex.  Which would you rather use?

    Arrays are simple.  Normalized relational databases are complex.  Plain text passwords are simple.  Kerberos and SSL are complex.  Enumerating a subtree recursively is simple.  String- or set-mapped associations are complex.

    For just about any problem, there's a simple and beautiful solution that's fundamentally flawed.  Whether it's a problem of scale, security, robustness, or usability, or some combination of the above, depends on the problem space.  And yes, in some cases, the flaws may not be important enough to warrant a more complex design.

    I wouldn't personally brag about how complex a system or product is, any more than I'd brag about how many lines of code it is.  However, I don't shun these characteristics either, because sometimes they are necessary.  Complexity isn't intrinsically good or evil, it just exists.  Simplicity usually [I]isn't[/I] such a laudable goal, except where UI is concerned.

    Catchy quotations hardly serve as strong evidence of the contrary, and Wirth is almost always taken out of context.  He doesn't argue that code should be naïvely simple.  He just argues, as do so many other software engineers, that it shouldn't be needlessly complex.  That may sound like the same thing, but it isn't.  Software engineers want high cohesion and loose coupling for better maintainability; these characteristics are present [I]ipso facto[/I] in a trivially simple system but can still exist in a complex one.



  • Actually, merge sort is extremely simple when expressed in a functional language.



  • @seaturnip said:

    Actually, merge sort is extremely simple when expressed in a functional language.

    And quicksort is less than ten lines of code in most languages. 



  • @Aaron said:

    Bubble sort is simple.  Quick sort and merge sort are both complex.  Which would you rather use?

    ...He doesn't argue that code should be naïvely simple.  He just argues, as do so many other software engineers, that it shouldn't be needlessly complex.

    Very true; however, I seriously doubt the writer of this job post was speaking of functionally critical algorithmic complexity.  I'd be willing to bet it's much more like the application I currently maintain; a behemoth. 



  • @Aaron said:

    [stuff]

    I find your post complex in such a way that it contains no obvious deficiencies.



  • Complexity grows from simplicity, but the fatal mistake is to halt at the complexity before returning it to simplicity again.



  • @asuffield said:

    @seaturnip said:

    Actually, merge sort is extremely simple when expressed in a functional language.

    And quicksort is less than ten lines of code in most languages. 

     Are you measuring complexity by number of lines?
     



  • @Stupidumb said:

    @asuffield said:

    @seaturnip said:

    Actually, merge sort is extremely simple when expressed in a functional language.

    And quicksort is less than ten lines of code in most languages. 

     Are you measuring complexity by number of lines?

    Roughly ten lines consisting of nothing other than simple comparisons and assignments, one per line. It's a very simple algorithm. The reason why it works is complex, the algorithm is not.



  • @asuffield said:

    @Stupidumb said:
    @asuffield said:

    @seaturnip said:

    Actually, merge sort is extremely simple when expressed in a functional language.

    And quicksort is less than ten lines of code in most languages. 

     Are you measuring complexity by number of lines?

    Roughly ten lines consisting of nothing other than simple comparisons and assignments, one per line. It's a very simple algorithm. The reason why it works is complex, the algorithm is not.

     

    The algorithm is why it works. 



  • And suddenly we have two things we're referring to when talking about "complexity".



  • @dhromed said:

    And suddenly we have two things we're referring to when talking about "complexity".

    Yep, A simple program solving a complex task is a good thing. A complex program solving a simple task i a bad thing. 


Log in to reply