An excellent speaker, especially in impromptu and minimally planned situations. Am able, for subjects where I have reasonable personal mastery of the materials, put together well regarded presentations in a matter of minutes. Have excellent teaching evaluations from students. See my online academic vita for more detail of my classroom experience and evaluations. See my list of presentations to get a sense of the kinds of materials I have presented on and the multimedia materials I present with. Excellent mastery of graphics and presentation software including HTML, Dreamweaver, Powerpoint, Visio, Adobe PhotoShop, and Freelance.
Have programmed in dozens of programming languages. More recent efforts have made extensive use of Java, Perl, JavaScript, PHP, C, C++, XML, HTML, SQL, Visual Basic, VBScript, NetRexx, CSS, XSL, and REXX. Have also made extensive use of PASCAL, BASIC, and assembly langugage (including 808x family and MC68xxx family assemblers. Have also successfully programmed in Prolog, Lisp, Logo, Object REXX, APL, SmallTalk, FORTRAN, FORTH, TCL, and a number of other languages. Designed XML tag sets and applications (DTD and CSS files; implementations in Java, PERL, Visual Basic and C++ code for production and interpretation) at IBM, Teradyne, and Empirix. Designed and prototyped an SGML editor at IBM. Designed or co-designed interpretable language syntaxes for FILEMAN, Easymenu, the E editor family interpreter (with Clark Maurer), the HELP tag-based hypermedia system (with Geoff Bartlett), Toolsrun/2 (with Bob Cronin and Ed Skorynko), ForAgent (with Terry Heath), MMDC, and other end-user programmable systems.
Have architected several complex networked system environments. The most recent of these environments, IBM's Business Partner Systems e-Business infrastructure, is also the most complex. Hundreds of applications and over 250,000 indexed documents are supported within an architecture that helps to optimize the performance of applications and the delivery times of new and updated documents. Business Partners can replicate the environment to servers on their own networks, and several hundred do so. They can also directly access the infrastructure via the web, and over 10,000 Business Partner Organizations follow that path. The overall architecture entails a complex server infrastructure entailing over 100 interconnected servers operating within multiple layers of increasing security, a coordinated release and testing process, multiple intersecting performance monitoring processes that allow us to track performance, when needed, all the way out to the Business Partners machine, and Business Partner Registration and content deployment processes that involve intersecting processes across multiple IBM organizations.
While BPS is the most complex architectural challenge I have handled, it is by no means the only one. Globenet provided a productivity environment for providing electronic service and support to customers across a variety of venues, including the Internet and a variety of on-line services. IBM TalkLink (originally OS2BBS) gives IBM customers direct entree to informal support via IBM's forum infrastructure. NetDoor (originally CORE) gave LAN connected users of OS/2 in the IBM Research division access to a broad variety of application and information resources in one of the worlds first true distributed computing environments. The solution was subsequently deployed broadly across IBM and was sold as an IBM product. The Yorktown PC Users Workbench was one of the first complete and fully integrated preloaded software environments to be delivered to end users on PC's. As workbench operated on standalone PC's, there was no infrastructure architecture beyond that required to do the software preload, but the application integration architecture associated with the system was a first in the PC industry. Key elements included a user extensible application launch menuing system, consistent menuing interface across applications, a default subdirectory structure, a built in context sensitive help system, and pioneering file and subdirectory management facilities that evolved into MicroSoft File Manager. Workbench evolved over time to include a powerful word processor, E, that has itself evolved into several product families.
I am equally comfortable doing Application Architecture, I/T Networking Architecture, and Process Architecture, and have the background and experience to solve just about any architectural problem in the computing arena.
Have designed, and in many cases also developed, many major programs and prototypes. Several have been among the most widely used PC programs in IBM. A number have found their way into various parts of IBM's product line. A few (FILEMAN, STP, and perhaps others) have also made it into MicroSoft's product line (as Windows File Manager) and can be counted among the world's most widely used programs. Sometimes my software designs have been a bit ahead of their time. HELP, for instance, anticipates almost all of the major elements of today's HTML/URL based network hypertext systems, and with a nearly identical tag based syntax. Indeed, it was used extensively in LAN production environments and WAN test environments five years before work on HTML started at CERN. HELP found its own niche early on, shipping with several IBM products including banking systems, military documentation systems, and the OS/2 operating systems (as Help Manager). The latter incarnation may have been influential on the design of HTML. Others designs have been intentionally tactical solutions that found ways to break out of their original design parameters. Mirror Backup, for instance, was originally designed as a tactical solution to the problem of backing up PC's over LAN's, but ultimately became a strategic solution for maintaining broadly distributed mirror image servers in the CORE/Netdoor environment.
The art of software design is found in a process of identifying problems that can be solved with software, identifying software solutions to those problems, and constructing a software design that people feel comfortable interacting with. A good software user interface has a lot in common with a well written and directed play. A well done play catches the audiences interest, guides the audience through a series of reactions, and allows the audience to direct the details through their laughter, applause, and other immediate feedback. Good software guides the first time user, provides appropriate aid to the intermittent user, gets out of the way of the power user, and manages all of these audiences seemlessly. Achieving these goals is only possible by taking the same approach any new theatrical production takes. You have to test the show out of town, figure out what isn't working, and put appropriate fixes in place before opening on Broadway. This kind of iteration cannot be achieved by doing all of the design work in advance, as is often the case in traditional waterfall model software design methodologies. It is best done iteratively, by developing a good prototype, testing it out, and rapidly rewriting it.
Have built and enhanced several computer-mediated human communication systems over the years, including the Turboconferencing web-enhanced teleconferencing system, the HELP tag-based hypermedia system, the TalkLink interactive online service, the Globenet electronic service and support system, and IBM's Business Partner Systems infrastructure, which included what was once the world's largest distributed electronic library and a billion dollar plus revenue eCommerce application. My longest running effort in this arena was the enhancement of IBM's corporate computer conferencing infrastructure, where I have invented agent management systems, user front ends, end user agents, and computer conferencing software. Designing new human communication media is my first love in software development, and I bring special expertise in my knowledge of computer mediated systems and my experience in designing and building new media.
Have long experience in building effective user interfaces for software. Indeed, have several influential industry user interface firsts to my credit. Among these are the traversable subdirectory tree, direct manipulation subdirectory management, direct manipulation file management, tag-based hypermedia browsers, active inference of intent-based markup based on editing behavior, and more. These innovations, and the highly successful programs that included them, reflect several specific philosophies of user interface design.
First, a user interface is really a user experience that has more in common with seeing a movie or a play than it does with interaction with a computer. The software designers job, in this environment, is much like that of the playwright or director of that play. They are in the business of manipulating the users expectations, helping them do the right thing, and making them feel good about doing it. I have been told, by a critic of one of my programs, that it was OK to tell them what was happening, but I damn well shouldn't tell them how they should feel about it. Actually, I consider that criticism something of a complement to the success of the UI in question.
Second, each instance of user interaction with a computer is, in effect, the construction of sentence that the computer can understand. Computers generally only understand highly constrained grammars. The grammar can be anything we tell it to understand, but the only grammar a computer application will understand is the specific one that we give it. People have a vastly greater capability to understand the same idea across the wide variety of legal transformations of grammar that are associated with human language. They can, in general, transform the same idea into a wide variety of sentences. There are, however, limitations to the range of grammatical transformations people can handle, and when people have trouble with a user interface, the first place to look is the sentences we ask them to construct. I have frequently found that the best solution to severe user interface problems is a rethinking of the applications presumtive grammer such that the sentence that the computer could understand was also sensible to the user.
Third, the best programs account for variations in human grammatical preference by supporting multiple grammars. Programs, in my experience should always support at least two grammars. The first is an action (verb, function, operation) initiated grammar that allows users to initiate action with the thing they want to do. The second is an object (file, folder, sentence, whatever) initiated grammar that allows users to manipulate an object (or set of objects) in some manner. I have found that new users of an application frequently prefer to approach it from the perspective of what the program can do (action-initiation) while experienced suers prefer to manipulate specific objects (object-initiation). It remains the case, however, that users will prefer each mode of initiation under different circumstances based either on cultural language preference or the locus of their attention (action or object) at the time they use the application.
Finally, every user interface starts out as an off-Broadway work in progress, and nothing can be assumed to be right until the audience laughs and applauds in the right places and the critics think its ready for Broadway. This means testing programs out on users and, where necessary, employing script doctors (usability experts).
Note that I not only have experience in successfully designing and building user interfaces, but in the methodology of testing, measuring, and analyzing them. I have built well-received UI testing labs, performed UI testing, engaged appropriate usability expertise as needed, and analyzed UI test data.
I don't believe in reinventing wheels. If a piece of software that meets, or comes close to meeting, requirements is already written, I'm not going to build it again if there is any reasonable way to use what already exists. Where others would prefer to build from scratch, I often prefer to integrate that which already exists, and I have a long history of doing so, starting with the Yorktown PC User's Workbench. Subsequent efforts in which integration of existing pieces contributed to more rapid development of software or systems include CORE, Mirror Backup, CoreUp, Filters Package, Talklink, Globenet, ROME, and Business Partner Systems. When the pieces are selected appropriately and a strong architecture is used to make the integration seamless, development through the integration of existing components is often the fastest path to market. It can also be an excellent marketing strategy, as the integrated system may well be attractive to users of the individual pieces.
Have written software for the Internet, VNET, PC Network, Ethernet, Token Ring, and other networks using TCP/IP, OS/2 Network Manager, NETBIOS, RSCS, and other network protocols. Have invented and successfully implemented network protocols, protocol independent network middleware, and end user front ends that provided a concurrent integrated view of the mail and files on multiple server systems using multiple network protocols. Have built web and other network servers from scratch, and designed and supervised the implementation of others. Have built end user and automated agent code for automatically searching network servers under a variety of protocols, including TCP/IP. Have built and/or enhanced a number of networked systems, including the first distributed hypermedia system, a large end user distributed network server environment, an enterprise scale forum infrastructure, an online service, an electronic service and support system, and a billion dollar revenue Internet eCommerce web site. Have experience in designing complete, reliable, and scalable internet systems with multi-level firewall security, Have experience building network capacity models, building network capacity forecasts, and building test and performance/capacity monitoring systems. Have maintained a LAN in my home since 1985.
While I have executed a number of my simpler software designs myself, most of my software implementations, including almost all of the more complicated systems, have entailed the efforts of multiple individuals whose efforts needed to be planned in advanced, coordinated during implementation, and converged into a single working system. I have taken on these planning, coordination, and overall leadership roles for every software system I have ever been associated with. I have generally found that the best way to do this is to break an implementation into well defined modules which interact with outer modules through pre-defined communication protocols and API's. This allows individuals to minimize interaction during the development phase and sometimes leads to complex software implementations that are completed on schedule without diminished function or undue fuss. The largest project that I have provided leadership for is IBM's Business Partner Systems infrastructure, in which I led a team of over a dozen architects, as many as 100 programmers, perhaps 25 testers, perhaps 100 other people working in various operations, help desk, and content preparation roles. Before Business Partner systems, the largest projects that I had planned, organized, and led were the Yorktown PC User's Workbench and Globenet), each of which entailed the efforts of about 15 programmers and other assorted players. In the latter of these projects I was a group manager in all but name, with responsibility for all hiring, assignments, progress tracking, evaluations, etc.
I have a long history of designing adaptive and rule-based intelligence into applications. Examples include BURT, PAGE, DARWIN, E2TEXT, FSORT, HSHELL, E2DRAW, Mirror Backup, the IBMPC monitoring, reviewing, and maintenance software, the genre-based identification of computer conference content, PARSMAIL, ForAgent, Toolsrun/2, and the Globenet gateways. This practical experience of building (generally) rule-based agent applications was paired with Benjamin Grosof's theoretical knowledge of rule-based agent design in 1994. The results of this collaboration started with a common or sharable agent architecture that became the basis of the IBM Agent Toolkit plugable architecture. All of the key features of this architecture, including sensors, effectors, reflexes, and interchangable agent engines, were designed into the initial sharable agent architecture design. We subsequently collaborated with Steve Brady and Terry Heath in the design of RAISE, a generalized rule based agent which forms the basis of the IBM Agent Toolkit. RAISE was designed specifically to accommodate the kinds of rule-based decision making that we were already handling in ForAgent, PARSMAIL, and the IBMPC reviewing and maintenance software, and which was being planned for Toolsrun/2.
Wrote my first published article on relational database design in 1981. Have since designed and worked with teams to design dozens of relational databases, including complex interconnected business databases. Have worked with IBM DB2, Microsoft SQL Server, Oracle, and other RDMS'. Many applications depend on having a robust data model that allows different kind of data objects to be joined in a variety of ways. I have acquired considerable expertise in relational database modeling in the course of building and architecting networks, software, and systems.
Excellent archival data, field research, quasi-experimental, experimental, and survey research design skills. Have designed and conducted ethnographic research, field experiments, laboratory experiments, surveys, and archival data analyses. Have created several characteristic-based typologies. Broad experience with the selection and use of appropriate statistical analysis techniques, including multiple regression, MANOVA, exploratory analysis, time series analysis, and exploratory multivariate techniques (factor, cluster, multi-dimensional scaling, etc) in conjunction with graphical visualization tools. Variable selection, rescaling, and secondary analysis skills have often found interesting results in what others had been thought to be unproductive data sets. Have very strong skills in the theory-based construction of appropriately shaped interaction effect variables. Excellent applied statistical skills and long experience in using statistical analysis packages including SPSS, BMDP, SAS, and many others.
Currently an active user of Linux, Windows 2000, Windows ME, and Windows XP. Have used built at least one piece of software under all of the following operating systems: VM, MVS, NOS, UNIX (Digital Equipment, XENIX, PC/IX, AIX, Linux), CP/M, PC-DOS, CP/M-86, UCSD P-System, OS/2, MacIntosh, and Windows (every version since 1.1). My favorite, among all of these, is the now all but dead OS/2, on which I have managed to run both client machines and servers for years at a time without rebooting. I may have a bias here, however, as I made substantial contributions to the development of OS/2. Indeed, I had a hand in every Presentation Manager application that delivered with OS/2 2.0 (built the prototype, wrote the design specification, and/or supplied the base source code). Sadly, I have now abandoned OS/2 altogether in favor of Linux and Windows variants. I currently favor Linux for servers and am beginning to migrate from Windows to Linux for end user applications. I also participated in the development of an operating system for IBM's CS/9000 (as a contractor).
I could get detailed here, but there really aren't many widely used end user applications that I haven't made extensive use of, and they are pretty much all the same these days anyway. Am an expert user of spreadsheets (I once built a "game of life" in Lotus 123) and other cellular programming environemnts. Am an expert user of Word processors (Word, Wordpro, WordPerfect, etc), Presentation software (Freelance, Powerpoint), Graphics and Image Processing software (Corel, Photoshop, PhotoStudio), Process Flow Modeling Software (Visio, Easyflow), Groupware (Lotus Notes, Wiki Collaborative Composition), Project Management Software (MicroSoft Project), Web Browsers and Web Content Creation and Management tools. If I have been able to think of a good reason to use a class of software (including CAD, database, terminal programmers editors, etc), I've generally done so. The only major class of software which I've never spent much time with is computer games (and I have published game reviews in PC Magazine).
A former professional writer/journalist. Have edited monthly and bimonthly newsletters on a volunteer (The CPC (Connecticut IBM PC Users Group) Newsletter) and professional (Electronic Mail and Message Systems) basis. Have created prototypes for new magazines (Reference) and newsletters (Shared Resource). Able to write accessible prose for the general marketplace, technical prose for the technical marketplace, and academic prose for scholarly publications. Have written final product documentation for two IBM products ( BURT3363 and OS/2 System Editor). Have written hundreds of articles on computer mediated communication systems. Have written supporting documentation for over twenty different programs since joining IBM. Have written detailed program specifications, in advance of implementation, for several others. Have written market research reports for the computer and telecommunications industries. Supported my family almost exclusively through my (often freelance) professional writing for over two years.