Software - Past and Present

Photo from a long time ago.

Computer Science Experiences

  • I am a lifelong ball player - basketball, football, soccer, baseball, softball, volleyball, horseshoes, cornhole, high jump, running, bicycling. I mostly ride my bicycles now.
  • I wrote my first program on an IBM 1600 using punched cards in January, 1974. I do not remember the programming language.
  • I studied math in college. I enjoyed abstract math, and could have gone to UVA graduate school for math, but I did not have enough confidence in my skills / abilities.
  • I took several CS courses in college. One was a computer architecture course where I learned assembly programming. Another was a compiler course, where I do not recall learning much; however, I did write a compiler later.
  • I worked 34 years as a civilian software/systems engineer for the U.S. Navy.
  • My time working for the U.S. Navy, I was primarily a maintenance software / systems engineer. We had large bodies of legacy systems and software. My job was to enhance the legacy systems / software.
  • The maintenance programmer's creed - Read the code, not the comments.
  • I have developed most every kind of software on many different computers.
    • Operating Systems - real time.
    • File Systems
    • Network Stack
    • Compilers
    • Assemblers
    • Linkers
    • Real-time naval weapon control systems

Ongoing Computer Science Projects

  • I teach computer science at the University of Mary Washington. I have been teaching for 11 years. I have been an adjunct, full-time fill-in, adjunct, full-time, and currently a full-time lecturer.
  • I have taught Introduction to Programming in Python, 2nd Programming Course in Java, Object-oriented Programming in Java, Discrete Math, Computer Architecture, and Operating Systems.
  • I have taught several independent studies. One was a fancy Java program that "controlled" radiation of melanoma in eyes. The program did not really control. A student worked as an intern and had several videos of manually controlled radiation. We used his videos to create a prototype system.
  • When I have extra time in a semester, I take a UWM course. I have taken Object-oriented Programming, Application of Data Bases, Data Mining, Computer Security, IT Infrastructure in the Cloud, and Web Development. This creates a fun dynamic. I am teaching some students while at the same time I am in a class with them.
  • As part of my teaching Computer Architecture and Operating Systems, I am developing Charm, a system to help teach these subjects. Charm has several components.
    • Charm Instruction Set Architecture - A 32-bit ISA that is a simplified version of the ARM A32.
    • Charm Assembly - The definition of an assembly code for the Charm ISA.
    • Chasm - An assembler that translates Charm assembly code into "binary".
    • Chibicc - A C compiler that that translates C into Charm assembly code. Chibicc is a compiler created by Rui Ueyama. See Chibicc by Rui Ueyama. I have modified Rui's code generator to generate Charm assembly. The Chibicc code generater is mostly correct; however, it generates code that is a stack machine so the code is not efficient and does not use Charm registers well. I have a goal to improve the code generator.
    • Chemu - A Charm emulator that runs Charm binaries. Chemu allows you to load Charm binaries, inspect/change registers, inspect/change memory, step through code, set break points, and run code. Charm supports simple printf/scanf in Chemu. Chemu exists in two forms - ncurses that has "windows" in a Linux termina and terminal - that scrolls as you enter commands.
    • ChOS - An operating system that runs in Chemu. At this time ChOS is not much of an OS, but I hope to improve it.
    • Chlink - A linker that can combine Charm binaries. I have begun working on Chlink, but it is an infant.
    • Cherver - A localhost web-server that can run Chemu. Cherver is an idea at this time.
    • Chtml - A web frontend that can connect to Chever. Chtml is an idea at this time. The goal of Cherver and Chtml is to create a fancy browser-based GUI front end to Chemu, which will complement the ncurses and terminal user interfaces.