Home
Content
Software Tools
The software development processes requires a software engineer to have knowledge of many tools. These tools range from design aids such as CASE Tools, development environments, object-oriented or structured paradigms, computer languages, and many more. It is impracticable to present every tool I use, but would like to touch on some of them.
Hardware Platforms
Some people seem to think that experience on a particular computer is required to program it. This belief only holds if the programming is going to be done in the assembly language for a particular platform. Even then, a person who has experience programming in more than two or three assembly languages is able to adapt to a new assembly language quickly. After all how many ways are there to perform the basic logic operations. Only the syntax and the status words are different. I feel that hardware is a basic software tool, just as a work bench is a tool for a craftsman.
Rather than try to describe all the hardware platforms I have worked with, I will just list some of them.
- PC compatible
- Itanium
- SUN
- MAC
- HP
- VAX
- ZILOG
- UYK-7
- Perkin Elmer (Interdata)
- True Personal Computer (S-100 I built myself [yes I know how to solder])
- IBM Mainframe
- AYK-14
- L-3040
Operating systems
A major portion of my recent experience with operating systems has been developing applications, CGI applications, web pages, and embedded system applications for various platforms and operating systems including Linux, Solaris, Windows NT, Windows 2000 and VxWorks. My preference for developing cross platform applications is to do the initial development on Linux, then port it. By keeping the application layer separate from the presentation layer, it is simple to port an application to another platform.
Usually porting an application between UNIX platforms is as simple as modifying the Makefile. If an application is also going to be ported to a Windows platform, it is usually necessary to add conditional compilation directives around some UNIX compatible code and around extra code to support Windows.
Following are some of the operating systems I have worked with or maintained:
- Linux
applications, drivers, CGI, Web Servers, embedded applications, system administration
- Windows (NT, 2000, 9x)
applications, drivers, CGI, Web Servers, embedded applications, system administration
(MFC, COM, DCOM ...)
- Solaris
applications, CGI, Web Servers, system administration
- HP-UX
applications
- VMS
applications, cross assebler, cross platform development
- VxWorks
embedded application
- REX-135
designed, implemented, real-time system
- Vertex
embedded application
- CP/M
device drivers (BIOS), assembler, applications
- ATEP/MAX
system maintenance, real-time system
- RDOS
memory manager, embedded applications
- RTOS
embedded application
- OS-32
device drivers, applications
- CMS-2
applications, embedded application development
- SPUDS
maintained, debug aids, applications, device drivers
CASE Tools
I use various CASE tools when they are provided, some of them are listed here:
- Rhapsody
- Rational
- Visio
- Software Through Pictures
- AutoCAD
- TeleUse
Compiled Languages
Knowing a computer language is not enough for a software engineer. Software development is an art or discipline like mathematics, and simply knowing a language is meaningless without logic. There have been many disturbing arguments in the professional journals against the necessity of studying mathematics for computer scientists. What other subject enforces the ability to think. I contend that all the other subjects we study are just memorization. I have command of multiple computer languages, and I have studied math and logic. Following are some of the compiled languages and how I used them.
- C++
embedded applications, stand alone applications, parser, report generator, ...
- C
embedded applications, device drivers, CGI applications, lexer, parser, transformer, utilities, assemblers, ...
- VC++
User interfaces, embedded applications, kiosks, ...
- CMS-2
real-time executive, real-time system, utilities, drivers, ...
- FORTRAN
real-time systems, utilities, numerical analysis, ...
- JOVIAL
real-time systems
Interpreted Languages
Although I have used several interpreted languages over the years, I am only listing the three most recent.
- Caché
embedded hospital system, embedded automated warehouse system, financial systems, utilities, menus, ...
Not just a language, but an advanced environment. Like M,
it has a built in database engine (but with a smaller footprint, and better performance), it supports backward compatibility with M, so it is very easy to port M applications. Ths languages it supports are:
- Cache Objects - A true object-oriented language with inheritance, encapsulation, and polymorphism.
- Object Script - Similar to MUMPS, but with better structure
- Cache Basic - Like VB Script, it is object-based, but it also can access persistent data using the Caché database engine.
- CSP - Cache Server Pages for building web pages
- MUMPS (also called M)
embedded hospital system, embedded automated warehouse system, utilities, menus, ...
- VB/VBA
visual prototypes, report generators, test drivers, test data generators, ...
Assembler Languages
I have used many different assembly languages to create real-time executives, device drivers, hardware diagnostics, memory managers, etc. Assembly language is nothing more than low level logic. The target processors include Intel 80x86, Motorola 68xxx series, Zilog Z-8000, Z-80, Perkin Elmer, UYK-7 (ultra-32), macro assemblers, etc.
Development Environments
Although I have worked with many development environments, my preference is a recordable white board and an editor for design, an editor for coding and a command window for compiling, and linking.
Scripting Languages
I use scripting languages for quick and dirty applications that are not intended for reuse. I also maintain a collection of awk and shell scripts that I have been carrying with me for years. I have used some scripting languages such as PHP and Perl for writing CGI applications, and used Tcl/Tk for writing small applications that require a GUI on Linux.
Database Engines
I work with many database engines including Sybase, Oracle, MS Access, SQL, MySql, MUMPS, Caché, etc.
Web Development
The tools I use for web development include JAVA, HTML,JavaScript, XML, CSP, VB script, etc.
Methodologies
I list software development methodologies (or paradigms) because without knowledge of the development methodology being used by the CASE tools above, the tools are meaningless. I have used and provided tutorials for structured and object-oriented methodologies. Methodologies are organizers for our tools and thought processes. I have seen many "my way is best" methodologies over the years. I have seen several attempts to merge structured methodologies with object-oriented methodologies.