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.

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:

CASE Tools

I use various CASE tools when they are provided, some of them are listed here:

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.

Interpreted Languages

Although I have used several interpreted languages over the years, I am only listing the three most recent.

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.