F05SENG411 Toolsets

From Craig

Toolsets

There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.
- Fred Brooks Jr. -- The Mythical Man-Month


  • Software construction involves essential tasks
    • Implementing the complex structures which make up the problem
    • Representing those entities in programming languages within space and speed constraints
  • Most of the big past gains in software productivity have come from removing artificial barriers which have made software development inordinately hard (incidental complexity)
  • How much of what software engineers do now is affected by incidental complexity?
  • Unless 9/10 of all effort is currently dedicated to incidental complexity, no tool which shrinks incidental complexity to zero can give an order of magnitude improvement.
  • The complexity of software is an essential property.
    • Descriptions of a software entity which abstract away its complexity often abstract away its essence.
  • Many of the classical problems of developing software products derive from this essential compleity and its non-linear increase with size.


Example: AS/400 Java compiler.


From complexity comes the difficulty of communication among team members, which leads to product flaws, cost overruns, [sic] schedule delays. From the complexity comes the difficulty of enumerating, much less understanding, all of the possible states of a program, and from that comes unreliability. From the complexity of the functions comes the difficulty in invoking those functions, which makes programs hard to use. From complexity of structure comes the difficulty in extending programs to new functions without creating side effects. From complexity of structure comes the unvisualized states that constitute security trapdoors.
- Fred Brooks Jr -- The Mythical Man-Month


I believe the hard part of building software to be the specification, design and testing of this conceptual construct, not the labor or representing it and testing the fidelity of the representation. We still make syntax errors, to be sure, but they are fuzz compared to the conceptual errors in most systems.
- Fred Brooks Jr. -- The Mythical Man-Month


The central question of how to improve the software art center, as it always has, on people.

  • We get good designs by following good design principles
  • Great designs come from great designers
  • Sound methodology can empower and liberate the creative mind; it cannot inflame or inspire the drudge.


How do we create great designers?

  • Systematically identify top designers. The best are not necessarily the most experienced
  • Assign career mentors to be responsible for the development of said designers.
  • Devise and maintain a plan for each prospect which include: 1) working with top designers; 2) formal training; and 3) solo leadership assignments.
  • Provide opportunities for growing designers to interact with each other.


I just bought a Mac to help me design the next Cray
- - Seymour Cray when he was informed that Apple had recently bought a Cray to help them design the next Mac


Fundamentally, in order for a tool to be effective, it must solve a problem that the developer has.

  • Communication
  • Minimizes complexity


Minimal Toolset

  • Email
  • Collaboration Tools
  • Prototyping tools
  • Configuration Management Tools
  • Testing Debugging Tools


Possible should-haves

  • Project management Tools
  • Libraries
  • CASE Tools


Remember, a Tools are not silver bullets. The best tool any programmer can have is the one between his/her ears.