Software Tools

My Philosophy Regarding Tools

In my courses and in my research, I promote the practice of solid computer engineering fundamentals through the use of engineering analysis, architecture and design tools.  My interest in tools is as a result of my many years of use in practicing the craft of computer engineering in industry, and from my research as a methodologist in a number of different hardware/software engineering domains--object-oriented analysis and design (OOA/D), database engineering, knowledge acquisition, business analysis and process engineering, and VLSI engineering and design.  I view these tools as a means to extend the imagination, thus allowing a practitioner to apply sound principles of abstraction, refinement and architectural analysis to the domain at hand--whether the design or hardware of software based systems.

As a vehicle for teaching and learning, I have found that the judicious use of enabling tools--and the methodologies on which tools are based--provides a set of operational notations and representation methods for precisely and unambiguously conveying design intent, and constitute powerful means for pedagogical teaching of fundamental practices of domain analysis, problem architecture analysis, solution architecture/design exploration and tradeoff analysis in a wide range of computer engineering domains.  Where possible, I try and integrate such tools into my classes and research efforts, and use these underlying methods as a means to teach disciplined thought and practice within the engineering domain of discourse.

Sapir & Whorf postulated a theory back in the 1930s (B. Whorf, Language, Thought and Reality, MIT Press, 1990 reprint), basically stating that the capabilities of a language shaped the capacity of thought and provided organization of cognitive activity.  Although this theory has come into some dispute among later scientists, I still find its direct application to the endeavors of computer engineering to be very applicable.  Thus, providing visually-based languages that allow rich, multi-dimensional communication of "intent" and semantics (structure and meaning in the perceived universe of discourse of some domain), and the methods and grammars for combining such symbols into reasonably precise yet "operationalizable" descriptions is of great value for communicating ideas--whether they be requirements, specifications, or explicit and discrete designs being explored in a state space search of possible designs under consideration.

The current tools in the arsenal are described and linked to appropriate pages and websites below.  It is this current sequence of tools that I use in exploring a system-level design, carrying the artifacts of such from a system-level specification of an algorithm or protocol, through to a "partitionable" architecture (into software and hardware), transforming such hardware-oriented descriptions into appropriate representations transformed into register-level hardware description that can be carried through the standard VLSI custom array-based logic design stream.