Steven W. McDougall
Electrical Engineer - 40+ years in hardware, software and algorithm development
swmcd@theworld.com
https://theworld.com/~swmcd/steven
198 Worcester Rd
Hollis, NH 03049
(978) 758-7053
EDUCATION
Stanford University, MS, 1983
Electrical Engineering
Princeton University, BS, 1982
Electrical Engineering and Computer Science
Engineering-Physics Program
EXPERIENCE
Grant Street Group, Pittsburgh PA
Senior Software Engineer 2/14-present
Wrote tax collection and billing software
Perl, MySQL, JavaScript, HTML, CSS, bash, git, Linux, NiFi, Windsurf
- TaxSys web-based tax collection system
- 5 MLOC codebase
- Added new features, fixed bugs, addressed performance issues
- Imported/converted legacy data for new clients
- Wrote Perl for backend, SQL for reports, HTML/CSS/JavaScript for GUI
Sonus Networks, Westford MA
Principal Software Engineer 7/09-1/14
Wrote diagnostic and monitoring software for telephone switches
Perl, C, MySQL, bash, Linux, SVN, RPM, RRD, PHP, Kohana, SNMP
- Programs collect call detail records (CDRs) and generate reports and graphs
- supported data rate of 4000 CDRs/second
- Took over in-house tools; rewrote and productized for sale to customers
- Wrote Perl for backend, SQL for reports, PHP for GUI
- Wrote alarm system to notify user of exceptional conditions
- Wrote logging system
- Wrote scripts for build, test, release, kickstart, install, and upgrade
SiCortex, Maynard MA
Senior Software Engineer 3/07-5/09
Wrote software for a 6000-core Linux cluster computer
Linux, Python, Perl, bash, SVN, Portage, RPM, SLURM, Syslog, NTP, LDAP, Nagios, RRD
- transitioned build system from Portage to RPM
- wrote power and temperature monitoring system
- in-house authority for Slurm job scheduler
- debugged fabric congestion and kernel races
- 6000 cores can hit 1-in-1,000,000 bugs in a few hours
- documented system for internal and external users
Incipient, Waltham MA
Software Architect 3/04-2/07
Wrote software for managing big storage systems
Win32, C++, Perl, SQL
- multi-terabyte SCSI fibre-channel RAID arrays
- object-oriented C++ application backed by relational database
- 500 KLOC code base
- created sub-systems for licensing and access control
- completed Pegasus server profile from pre-release sources
- passed SNIA Conformance Test Program
WebEvent, Andover MA
Senior Software Engineer/Technical Lead 2/03-2/04
Wrote software for a web-based calendar application
Linux, Perl, JavaScript, HTML, XML, MySQL
- architected next-generation product
- scales to 10,000 users and calendars
- implemented and shipped on time
- wrote HTML/JavaScript for browser-based UI
- wrote middleware layer in Perl
- wrote SQL for database access
- profiled and optimized database queries
Avid Technology, Tewksbury MA
Principal Software Engineer 7/00-1/03
Wrote software for distributed storage systems
Linux, WindowsNT, Mac OSX, C/C++, Perl
- developed algorithms, protocols and software for a big, fast,
reliable distributed storage system
- demonstrated prototype at National
Association of Broadcasters 2001 trade show
- wrote a WindowsNT file system client and network provider
- used OSR file system development
kit and kernel mode sockets interface
-
designed and implemented software to partition disks under program control
- guaranteed correct operation after crash and restart
- wrote a protocol simulator
- wrote make systems
- generated builds for Windows and Linux, kernel-mode and user-mode
- recursive dependency checking for all libraries and source files
- wrote Mac OSX kernel extensions
Senior Software Engineer 8/97-6/00
Wrote software for video editing systems
WindowsNT, MSVC++
- wrote a client-server program to move media over TCP/IP
- developed plug-in architecture to support alternate transports & protocols
- enabled Avid software to work with 3rd party products
- used memory-mapped I/O for speed
- 10 MB/s end-to-end transfer rate over 100 BaseT
- added HTTP/XML interface for integration with web-based applications
- wrote regression tests
- kept code stable & robust through 2 years of evolving requirements
- integrated a 3rd party video recorder with Avid editing application
- documented APIs for in-house and 3rd party use
Oscient Pharmaceuticals Corporation, Waltham MA
Senior Software Engineer 9/95-7/97
Wrote software for DNA sequencing operations
VAX/VMS, Solaris, C++, Perl
- maintained software in daily production
- when production is down, it has to be fixed
- modified legacy software to function far beyond its original design limits
- critical to meeting customer expectations in a $20M deal
- recovered data from corrupt multi-gigabyte database
- critical to success of company's first commercial sequencing project
- wrote new production software
- hired 7 programmers
- supervised 4 programmers
Senior Scientific Programmer 10/93-8/95
Developed software and algorithms for DNA sequencing
VAX/VMS, Solaris, C++, Perl
- developed and programmed sequence assembly algorithms
- successfully assembled sequences on which existing techniques failed
- presented results at a scientific conference
- wrote software to analyze physical mapping data
- ran orders of magnitude faster than existing software
- developed new graphical display techniques for genomic data
Sepracor, Marlborough MA
Senior Software Engineer 4/92-9/93
Developed instrument control software
DOS, Microsoft C/C++
- took over software from consultants
- established in-house development capability
- wrote GUI, graphics, data acquisition and instrument control software
- worked with vendors to solve problems in 3rd-party libraries
- established procedures and standards for software development
- wrote documentation to support customer FDA validation efforts
Varityper, Billerica MA
Senior Software Engineer 10/90-4/92
Developed software for networked printing systems
Mac OS, DOS, C/C++
- wrote an EtherTalk to SCSI protocol converter
- attained industry-leading benchmarks for print job speed
- wrote a TCP/IP file server on Unix; later ported to Macintosh
- used setjmp/longjmp to emulate multi-threading on the Macintosh
- designed Macintosh user interface for an image editing program
Osteo-Technology, Framingham MA
R&D Engineer 3/87-8/90
Developed hardware, software and algorithms for medical ultrasound equipment
DOS, Microsoft C
- performed statistical analysis of data from clinical trials
- critical to investor decision to continue funding
- developed and programmed DSP algorithms
- algorithms enabled novel application of ultrasound to bone diagnostics
- wrote data analysis and graphics software
- output was submitted to FDA
- developed procedures for documenting and tracking data analyses
- ensured that results could always be regenerated from raw data
- designed digital and analog electronics
- designed manufacturing test hardware and software
- developed new ultrasound measurement techniques
GCC Technologies, Bedford MA
Manufacturing Engineer 4/85-2/87
Developed OEM disk-drive manufacturing process
Mac OS, Lightspeed C
- designed test processes, test hardware and test software
- 1% return rate on first 10,000 units shipped
- wrote device drivers for SCSI disk drives
- reviewed products for manufacturability
- analyzed production fallout
- designed hardware and software for component qualification tests
Design Engineer 6/83-3/85
Mac OS, C, various assemblers
- designed video game hardware and software
- programmed Macintosh user interface for a database program
XEROX PARC, Palo Alto CA
Engineer 1/83-5/83 (part time)
VAX/VMS, Pascal
- performed computer analyses of semiconductor fabrication processes
- assisted principal investigator in interpretation of results
- wrote a full-screen text editor
- took advantage of local editing capabilities of HP terminal
IBM, Poughkeepsie NY
Engineer 6/82-9/82 (summer)
- developed algorithms for use in automated logic design system
Princeton University
Research Assistant 4/81-6/82 (part time)
HP-1000, C
- wrote graphics and data analysis software
- advised principal investigators on digital signal analysis techniques
- restructured algorithms to avoid disk thrashing
- developed hardware for laser tomography system
CIBA-GEIGY, Ardsley NY
Programmer 6/80-9/80 (summer)
IBM System 370, PL/I
- modified PL/I data analysis and archiving program
- program generated data for submission to FDA
SKILLS
- OS
- Linux, Win32, Mac OSX, MS DOS, VAX/VMS
- Languages
-
C/C++,
Perl, Python, PHP, bash,
Java,
JavaScript,
SQL, FORTRAN, Pascal, PL/I, LISP, APL, BASIC
- Databases
- MySQL, MS SQL server, Oracle, Sybase, Filemaker Pro
- Markup
- HTML, CSS, XML,
SVG
- Protocols
- TCP/UDP/IP, HTTP, SNMP, SCSI, AppleTalk
- Development environments
- Unix/vi/make/gcc/gdb, Windows/MSVC++, Macintosh Project Builder
- Version Control
- git, Subversion, ClearCase, Perforce, CVS, SCCS, RCS
- System Management
- Slurm, Syslog, Nagios, LDAP, NTP
- Graphics
- GD, GD::Graph, Perl/Tk, X/Motif, Macintosh, MetaWINDOW
- Hardware
- PC, Macintosh, Sun Sparc, DEC Alpha, DEC VAX
- Assemblers
- 8086, 68000, 6502, 8051, PIC
- CAD
- NiFi, Orcad
- AI
-
- Windsurf
FREEWARE
Convert::yEnc
- yEnc decoder, with database of file parts
-
Game::Stones
- Play the game of Stones - an exercise in dynamic programming
-
News::Newsrc
- Manage newsrc files
-
Pod::Tree
- Parse a POD into a static tree.
Includes
Pod::Tree::HTML for translating PODs to HTML.
-
Set::IntSpan
- Manage sets of integers, newsrc style: 1-7, 15, 23-28
-
Set::Window
- Manage an interval on the integer line
-
A heap
malloc() and free(), with diagnostics and integrity checks
Tech notes
PerlMonth articles
Perl documentation
- Object-oriented programming in Perl
- It's all done with mirrors
- Module Mechanics
- How to build a perl module
- Module Anatomy
- A skeleton for a Perl module
- Module PODs
- How to document a perl module
- Program Anatomy
- A skeleton for a Perl program
- Program PODs
- How to document a perl program
Steven W. McDougall /
swmcd@theworld.com /
2025 Aug 31