Articles and resources on pragmatic codes and development practices to help you build great products.

About me

I started programming in 1981. I was 16 then, saw a TRS-80 (a Z80 based computer by Tandy/Radio Shack) at a friend’s house, and was immediately obsessed.

Microcomputers were new then1. After much begging and persuasion, my father bought me an Apple II+2, and we ended up with not just the computer and it’s monitor, but also floppy disk drives, a dot-matrix printer, and a Z80 card for running CP/M3.

The Apple II+ had a 8-bit CPU (6502) that ran at about 1Mhz, thousands of times slower than today’s CPUs. It had 48KB of RAM. That’s Kilo-Bytes, and it takes one million KBs to make one GB. Its screen resolution was 280x192, about one-third the pixels I have on my Apple Watch today.

I must had spent thousands of hours on the Apple II. Any time I could, I was on it playing games, trying out word processing, spreadsheets, drawing programs, and programming. I started out with BASIC, then went on to Pascal and 6502 assembly. One of my proudest early project was a 6502 program that hooked into the Apple DOS to display 70x24 text using the graphics screen.

I’ve always been fascinated with the ability to create and over the years have, either through study, work, or interest, worked on and learned how to program on multiple platforms and languages4.

  1. Beside the TRS-80, there were the Altair 8080, Commodore PET, Apple II, and a few others. 

  2. In an earlier version of this page, I mentioned it was an Apple IIe. It was more like an Apple II+. Hard to remember which after all these years. 

  3. The whole ensemble was not cheap, and since the market was even smaller in Singapore, it was more expensive than in US. In the end, it costed about eight thousand Singapore dollars, more than half a year’s wages at that time. It was only years later that I understood how much of a sacrifice my parents had made, and I’m forever grateful for their love and generosity. 

  4. I have programmed on PDP-11 clone by Prime, IBM Mainframes, VMS on a VAXstation, DOS, Windows, OS/2, supercomputers by Cray and NEC, a LISP Machine workstation, SunOS, Solaris, BSD, Linux, AIX, HPUX, and other Unix variants, and various incarnations of the Macintosh. Beside BASIC and 6502 assembly, I’ve used COBOL, Fortran, C, C++, Pascal, Prolog, Common Lisp, Scheme, Javascript, Typescript, Ruby, Python, R, Octave, various shell scripts, Go, Swift, Java, Kotlin, etc.