5
Henry H. Rich ([email protected]) Programmer – Hardware Designer – System Architect – Algorithms As a programmer I excel at writing complex code that runs fast, and in making other people’s code run fast. For the last ten years I have homeschooled my children and taught in highschool. I miss the computer business and am looking for a job writing interesting programs. What I’m good at: Back-end programming. I am at my best on the core algorithms of a project. Performance. Throughout my career I have written software and designed hardware that runs fast. I started programming with assembler language and always keep the machine architecture in mind – especially important today when memory speed and cache utilization govern performance. Large systems. I have been the system architect on large projects in computer graphics and flight simulation. I am comfortable designing big systems. Details. Even when planning a big system I envision how the components will work in detail. When coding modules I write thorough testcases and detailed commentary. Algorithm Design. Throughout my career I have been responsible for designing the algorithms used in my hardware and software designs. Mathematics. I am comfortable with engineering mathematics at the graduate level. I know, and know how and when to use, the staple algorithms of computer science. Brief career description (a longer version is given later): I fell in love with computing in my freshman year of highschool and have been doing it ever since. After a BSEE from North Carolina State University I signed on with IBM as a programmer. After 7 years there I left for the lure of a startup, where I was responsible for hardware and software design. After that I became a consultant, doing various hardware and software jobs, and then got a big break when GE hired me to be the architect for their low-cost flight simulator. I continued as a system architect in computer graphics and flight simulation for more than a decade. The system architect’s job, as I did it, consumed all my time whether in the office or not, and when my children were born I needed to make a change if I was to be part of their lives. I wrote a program to automate stock trading and supported the family by using it to daytrade my retirement fund. With the program watching the market and executing the trades, I spent my days homeschooling my elder daughter. When she chose to go to a charter highschool, I decided to try teaching and got a job at the same school teaching math, computer science, and Latin. That’s still my day job. Fish got to swim, bird got to fly, and I got to write code: I have continued creating large software projects. I became an authority on the language, J, that I used to write my stock-trading and later large programs, and early in 2016 I started working on the J interpreter, the heart of the language. I am now Principal Developer of the interpreter, and the work has been so fulfilling that I want software development to be my full-time job again.

Resume

Embed Size (px)

Citation preview

Page 1: Resume

Henry H. Rich ([email protected])Programmer – Hardware Designer – System Architect – Algorithms

As a programmer I excel at writing complex code that runs fast, and in making other people’s code run fast.

For the last ten years I have homeschooled my children and taught in highschool. I miss the computer business and am looking for a job writing interesting programs.

What I’m good at:• Back-end programming. I am at my best on the core algorithms of a project.• Performance. Throughout my career I have written software and designed hardware that runs

fast. I started programming with assembler language and always keep the machine architecture in mind – especially important today when memory speed and cache utilization govern performance.

• Large systems. I have been the system architect on large projects in computer graphics and flight simulation. I am comfortable designing big systems.

• Details. Even when planning a big system I envision how the components will work in detail. When coding modules I write thorough testcases and detailed commentary.

• Algorithm Design. Throughout my career I have been responsible for designing the algorithms used in my hardware and software designs.

• Mathematics. I am comfortable with engineering mathematics at the graduate level. I know, and know how and when to use, the staple algorithms of computer science.

Brief career description (a longer version is given later):

I fell in love with computing in my freshman year of highschool and have been doing it ever since. After a BSEE from North Carolina State University I signed on with IBM as a programmer. After 7 years there I left for the lure of a startup, where I was responsible for hardware and software design. After that I became a consultant, doing various hardware and software jobs, and then got a big break when GE hired me to be the architect for their low-cost flight simulator. I continued as a system architect in computer graphics and flight simulation for more than a decade.

The system architect’s job, as I did it, consumed all my time whether in the office or not, and when my children were born I needed to make a change if I was to be part of their lives. I wrote a program to automate stock trading and supported the family by using it to daytrade my retirement fund. With the program watching the market and executing the trades, I spent my days homeschooling my elder daughter. When she chose to go to a charter highschool, I decided to try teaching and got a job at the same school teaching math, computer science, and Latin. That’s still my day job.

Fish got to swim, bird got to fly, and I got to write code: I have continued creating large software projects. I became an authority on the language, J, that I used to write my stock-trading and later large programs, and early in 2016 I started working on the J interpreter, the heart of the language. I am now Principal Developer of the interpreter, and the work has been so fulfilling that I want software development to be my full-time job again.

Page 2: Resume

Below is a list of the most memorable software and algorithms I have created. This list doesn’t includethe myriad support and research programs I have written as part of the system architect’s job, or any collaborative projects except as noted.Year and Company Code or Algorithm

2016I am now Principal Developer of the J interpreter; new releases and bug fixes. This is a collaborative project.

2013-2016 dissect – 2-D programming interface for the J language2012 lint – static code analyzer for the J language

2006-2014 QBManager – software for complete management of Quiz Bowl tournaments1998-2004 RTrade - automated stock-trading program

1996IDT

Algorithm for using data compression on texture maps (patent issued)Algorithm for dithering with greater fidelity of luminance (patent issued)

1990 GE Five-level timing verifier for PAL-based hardware designs

1989GE

Algorithm for antialiased polygon rendering with positional accuracy to 1/16 of apixel (patents issued)Algorithm for displaying complex images by skipping over filled pixels (patents issued)Algorithm for calculating texture-map addresses cheaply (patents issued)

1988 Wavetracer CORDIC function library for a 1-bit processor1985 Sun Microsystemsmicrocoded 2-D FFT library

1984 Adage Full emulator for IBM 3279 display terminal

1981IKONAS

IKEDS – design-automation software to turn electronic designs into wire-wrap instructionsAlgorithm for filling arbitrarily complex polygons with no impairment of speed for any convex polygon

1976-1980IBM

RED – a graphical text editor used widely within IBM, with support for editing using patterns similar to regular expressions. I was the main designer, but much of this code was written by others.

1975IBM

delta – a program to automatically merge software versions, like diff but conceived and implemented independently. I designed the algorithm.

References:• For my most recent software work: Eric Iverson, CEO of Jsoftware, Inc,

[email protected]• For my work as a computer architect: Joel Dedrick, [email protected]• For my work as a teacher: Lisa Huddleston, Principal of Raleigh Charter High School,

[email protected]

Hobbies:

• A cappella singing

• Work on the J programming language

• Expert bridgeplayer

Page 3: Resume

Long Version

I have done much hardware design in my career, but the constant thread has been software: software for applications, and software to make the hardware go. I have been writing programs almost every day for the last 50 years. In the beginning I used assembler language; in the middle years I wrote in C, and in the latest third I have used the functional language J. I am comfortable at any level from the lowest to the highest. I have made of specialty of analyzing and rewriting code to improve performance.

1966 First programs on the time-sharing terminal at Enloe High School

1973 BSEE with honors, North Carolina State University

1973-1980 IBMI learned the craft of programming, writing SNA telecommunications software, a text editor widely used within IBM, and program-library tools, including a tool to merge releases – like diff but developedindependently.

1980-1984 IKONAS Graphics Systems, acquired by AdageI joined a startup raster-graphics company, taking responsibility for new-product development including hardware, software, and diagnostics. Adage, a vendor of stroke-graphics products, bought IKONAS to move it product line towards raster graphics. As Vice President/Chief Engineer, I took technical responsibility for this development, including hardware and microcode design. My last product could draw 25,000 smooth-shaded Z-buffered triangles per second – big news in 1984.

1984-1988 Independent ContractorI left Adage to try life as an independent contractor. It suited me, and I had several long-term projects, where I distinguished myself by high productivity:

For Adage, I wrote a full emulation of the IBM 3279 graphics terminal in 12 weeks.For Sun Microsystems, I wrote a 2D FFT library for their bit-slice graphics processorFor Wavetracer (a now-defunct startup), I wrote elementary-function library for their massively-parallel SIMD bit-serial processor. I chose CORDIC as the underlying algorithm.For Gould's Modicon division, I did design reviews and also converted a 80186 design to run ona single board in an IBM PC, and successfully ported 20,000 lines of C application code to the new design – this last in 4 months working for the company one week per month.

1988-1994 Architect, GE Graphicon Division, later acquired by Star TechnologiesGE wanted to build a low-end flight simulator and hired me as the system architect. The result was the Graphicon 2000, the first 60Hz textured, antialiased flight simulator to sell for less than $100,000 per display channel. I designed the algorithms for database traversal, hidden-surface removal, and antialiasing; designed two of the three circuit boards; and wrote the critical parts of the microcode. I have 4 US patents from this work.

Commercially-available design software could not adequately simulate the devices I used to design the circuit boards, so I wrote a five-level timing verifier to prove the design.

The most important development for my programming career during these years was my introduction to the J programming language. At IBM I had spent a happy summer working on a project written in

Page 4: Resume

APL, and I never forgot the experience. Now that I was in a position to choose my language, I talked to Ken Iverson, the inventor of APL, who convinced me to try his new improved version, J. J's incredible productivity has been proved over and over again. I first used it to model the texture-map processing for the flight simulator in 100 lines of code. Once when we had a strange display problem I solved it by modeling the 3-D transformation pipeline in J in an afternoon. Since finding this secret weapon I have used J more than any other language.

1993-1995 Independent ContractorFinancial problems plagued Graphicon and I went on part-time status towards the end. I took on other jobs:

For QMS, a printer company, I did design reviews, added a performance monitor (based on sampling during timer interrupts), and rewrote printer firmware to improve performance.For IVEX, a flight-simulator company, I worked on modifying a massively-parallel processor designed at the University of North Carolina to turn it into a viable flight-simulator architecture.

1996-1998 Director of Graphics Architecture, Integrated Device Technology Inc.The work for IVEX bloomed into a design for a single-chip graphics processor for the PC. This caughtthe interest of IDT, a chipmaker in Silicon Valley, who bought the project. I became the Director of Graphics Architecture, responsible for the graphical algorithms and microcode. I have 7 US patents from this work.

1996 My first daughter turned six.

1998-2007 Stock Trader using my own softwareThe arrival of my daughter changed my work life. Until then, I had been essentially 100% devoted to my work, whether in the office or out. That had to change. I wanted to give my family top priority, so I cut back to half-time at work, and started on a wild idea: trading stocks for a living. I had a modest retirement fund built from my savings as a consultant, and started trying to buy low and sell high.

It worked! But it was boring as can be, not to mention time-consuming. So I wrote a program to automate the procedure. This eventually ran to 50,000 lines of J (equivalent to at least a quarter of a million lines of C). My wife & I still use it to do our trading. I'm sure there are people who did better, but I will just say we outperformed Warren Buffett by a large margin over the period 1998-2010.

1998-2000 Consultant (part-time), Marathon Technologies, BostonI designed a pair of field-programmable gate arrays for Marathon's fault-tolerant computer product.

2001-2006 Homeschooling FatherI dropped from half-time to no-time, kept daytrading stocks, and homeschooled my first daughter from 5th grade to 8th grade.

2006-2007 Consultant (part-time), Argonne National LaboratoryI taught a course on the J programming language at Argonne National Laboratory. This led to their hiring me to contribute to a simulation to model the effects a terrorist attack would have on the banking system. My piece was to model how individual firms respond to perceived disruptions in orders and payments. This code was in J, and I also functioned as the J expert on the project.

2008-now Teacher, Raleigh Charter High SchoolWhen my first daughter decided to go to highschool, I was out of a job as a homeschooling father, but I

Page 5: Resume

didn't want to go back to computer work while my children (including a younger daughter who was happy in public school) were at home. I decided to try something new: teaching. When a job opened up at my elder daughter's charter school, I took it. It was much more difficult than I thought it would be, but I have learned a lot and I think I do a creditable job. I teach computer science, Algebra II, Calculus III with Linear Algebra, and all levels of Latin when we offer it.

2000-now Programmer and Authority in JWhatever else I'm doing, I write code. When I get to pick the language, I write in J. My major projectshave been substantial:

A stock-trading program, mentioned earlierA static program analyzer to detect coding blunders in J programs. Since J is interpreted, this is quite a challenge. You'll have an idea of what it does if I tell you its name is lint.A two-dimensional development interface for J sentences. This is the program I hope to be remembered for. For my whole life I've heard talk about 2-D programming interfaces, but I've never before seen one come to fruition. My program, dissect, displays the execution of a J sentence with full interactivity, allowing the user to probe around and see how the sentence was executed. It was the hardest program I've written, 3 years in the making, and involved everything from the minutiae of the J language to the design of the user interaction and implementation of the GUI with a graphics library whose tools are lines and rectangles.A system for managing Quiz Bowl tournaments. This started as a pleasant diversion and turnedinto 20,000 lines of highly robust code to manage tournaments, with real-time collection of dataand pairings, distributed across 20-odd client machines, one control machine, and a server in thecloud to coordinate things. Not even freshmen users and intermittent Internet connectivity havebroken it, I'm proud to say.A tool to automate everyday classroom tasks.

I have also had two writing projects:A highly-regarded book on the J language titled J for C ProgrammersThe authoritative online reference for J users, describing the language in detail, at http://code.jsoftware.com/wiki/NuVoc . I was responsible for the technical content of this site.

2016-now Principal Developer for the J Language (coding in C)In early 2016 I ran across an error in the J debugger that crashed occasionally, but unfortunately the occasional time was when a user ran my lint tool in debug mode, and I needed my students to be able todo that. Alas, the main developer of the language was no longer with the firm, and there was no one who understood the code well enough to fix the problem. The source code for J was open-source C, but it was large, notoriously complex, and utterly uncommented, and before I could even begin to workon it I would have to learn Microsoft Visual Studio and git. I dived in, fixed the problem in about a week, and came up to speed with modern development tools.

This changed everything for me. I was doing commercial programming again. With working access tothe J source, I could fix all the bugs that had accumulated over the last few years, and do performance analysis to see what could be improved. I have made the interpreter about 3x faster, gotten rid of all the handwritten assembler code by replacing it with C that runs just as fast, and added proper commentary wherever I go, so that now about 20% of the code has good commentary. Look at what I did in part-time work over half a year at http://code.jsoftware.com/wiki/System/ReleaseNotes/J805

The experience reminded me how much I love the software business, and how exhilarating it is to ship good code to waiting users. Now that the kids are grown and gone, I want to get back into the game.