Software: Wisdom & Insights

Software? Life!: Wisdom & Insights.

  • "It seems that perfection is attained not when there is nothing more to add, but when there is nothing more to remove." - Terre des Hommes. Antoine de Saint Exupéry

  • Dilbert Principle: "Leadership is nature's way of removing morons from the productive flow" - i.e. incompetent people will get promoted into to a leadership job where they can do no harm. - Scott Adams

  • Peter Principle: "In a hierarchy every employee tends to rise to his level of incompetence." - The Peter Principle. Laurence Johnston Peter

  • Parkinson's Law: Work expands so as to fill the time available for its completion. - Cyril Northcote Parkinson

  • Negative Selection: People in higher hierarchical positions only promote people that are not competent enough to replace them.

  • Putt's Corollary: "Every technical hierarchy, in time, develops a competence inversion." - Putt's Law and the Successful Technocrat. Archhibald Putt (pseudonym)

  • Hofstadter's Law: "It always takes longer than you expect, even when you take into account Hofstadters's Law." - Douglas Hofstadter

  • "Easy things should be easy, and hard things should be possible." - Larry Wall

  • "Program testing can be used to show the presence of bugs, but never to show their absence!" - Edsger W. Dijkstra

  • "A Foolish Consistency is the Hobgoblin of Little Minds" - PEP 8

  • "The enjoyment of one's tools is an essential ingredient of successful work." - The Art of Computer Programming. Donald E. Knuth

  • The Zen of Python - PEP 20

    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than right now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!

  • Manifesto for Agile Software Development

    Individuals and interactions over processes and tools
    Working software over comprehensive documentation
    Customer collaboration over contract negotiation
    Responding to change over following a plan

    See also the principles behind the manifesto.

  • Dude's Law: Value = Why? / How?

  • Software Engineering Code of Ethics

    1. PUBLIC - Software engineers shall act consistently with the public interest.

    2. CLIENT AND EMPLOYER - Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.

    3. PRODUCT - Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.

    4. JUDGMENT - Software engineers shall maintain integrity and independence in their professional judgment.

    5. MANAGEMENT - Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.

    6. PROFESSION - Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.

    7. COLLEAGUES - Software engineers shall be fair to and supportive of their colleagues.

    8. SELF - Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.