Experience
Accomplishments
- Engineering Management & Head of Engineering
- Lead teams of 5+ engineers across 2 seed/series A companies over 5 years
- Excelled at leading & organizing massive systemic overhauls, refactorings, and integrations
- Achieved 99.99%+ up-time while lowering time to release from 2 weeks to 1 hour with CI/CD processes
- Mentored and enabled leveling-up of multiple engineers
- Reduced production bugs by ~90% per LOC with better design, testing, dev tools, and processes
- Software Engineering & Design
- Written 1,500+ programs over 24 years
- Experience with all major programming language families and 26+ languages
- Creator of 15+ open source applications and libraries, and contributor to many more
- Created from scratch: Bootloader, OS, Compiler, Programming Language, Standard Library
- Experience programming: web apps (FE/BE), database engines, databases, drivers, bootloaders, OSes,compilers, desktop apps, mobile apps, augmented reality, 3D graphics, and more
- Software Engineer at: Zillow, HotPads, Franz, Limos.com, FastAF, OptHealth
- Teaching, Writing, & Public Speaking
- Host and creator of the software engineering focused podcast, The React Show, with over 100 episodes and over 100,000 downloads
- Author of Foundations of High-Performance React
- Given technical and educational talks on various subjects
- Startups / Consulting / Business
Solutions
-
Languages
- Assembly (x86, x86_64, ARM):
- BASH:
- C:
- C++:
- C#:
- CSS:
- Haskell:
- HTML:
- Java: 2007, 2004
- JavaScript / TypeScript: 2013, 2012, 2011, 2008, 2004
- K:
- Lisp (Scheme, Common Lisp, 3Lisp, Arc): 2013, 2012, 2011, 2010, 2009, 2008
- Perl: 2004
- PHP: 2013
- Python: 2013
- Ruby:
- Smalltalk:
- SQL (MySQL, MSSQL, Postgres): 2013, 2009
- VB.net: 2004
- Visual Basic: 2003
By Year
2019
Franz
2018
Franz
2017
Franz
2016
Franz
The 3L Project
2015
The 3L Project
kabonky
chicken webserver (simple)
https://bitbucket.org/thomashintz/chicken-debugger/src/master/
chicken debugger
https://bitbucket.org/thomashintz/chicken-debugger/src/master/
2014
Augemented Reality Project (Pear)
end of 2014
https://bitbucket.org/thomashintz/pear/src/master/
Stork
stock market game with continuations?
Chicken Scheme websockets
CL PG Sessions
postgress sessions for hutchentoot
CL Password
Common Lisp SendGrid
2013
Emacs in the browser
I wrote an emacs-like clone in JavaScript, that would run in the browser and read/write files on a server and could also execute projects and display the output. It was partly to see if I could do it and partly because I thought it would be nice to be able to work on projects with just a web browser.
I had been working with HTML and JavaScript for over 10 years at this point but this project really forced me to understand those and browser's themselves at a much deeper level, along with learning the data structures needed for creating a text editor. I no longer use this project because I generally have access to a full-fledged emacs installation but it was a really great learning experience.
The final version of this was developed in a very similar way to emacs itself, with everything being based on "commands" and you could map keybindings to those commands. It took a lot to get the performance to be good but with a lot of research into both how text editors are designed and how browser engines render things I was able to get it to be quite high-performance and it could open and manipulate very large documents, including with things like syntax highlighting.
CHICKEN Scheme Alley Cat
I was growing tired of maintaining my own CMS for publishing to my website, thintz.com, so I set out to rebuild the site with a static site generator that I could serve the output via an HTML webserver like nginx. This lead to the development of a small open source library called Alley Cat, written in CHICKEN Scheme.
It is a very minimal library that mostly just allows for writing websites in either SXML or Markdown, across files in a directory. This is still the way I build thintz.com or other similar sites like (3L Project)[https://3lproject.org]. In hindsight, this really shows the evolution of my programming design skills as it is much more simple and targeted compared to some previous projects and, I think because of that, it has had real longevity.
Wasteless
After moving on from BetterShop, I wanted to gain more experience with Common Lisp, so I chose to create the project "Wasteless". Wasteless was a web application that made it easy for me to track the food I had and make sure I used things before they would go bad.
The web application was written in Common Lisp on top of Hunchentoot and Postgres. It also used the Common-Lisp-to-JavaScript compiler Parenscript. I used the project heavily for a few years before developing ways of making sure my food didn't go bad without needing technology.
It was a great experience learning some new programming techniques and facilities. In the end, it didn't seem like it was necessarily better than working in Scheme but I did learn some new techniques that I would use later on, like with the Common Lisp Object System. It was also just more experience in running web applications more robustly with less maintenance. Compared to some of my earlier web applications, this was by far the most reliable with the least amount of maintenance; I could just generally leave it alone and it would run for years on its own.
BetterShop
I was frustrated with the existing ecommerce shopping experiences at the time and set out to see if I could come up with a better online shopping aggregator, which I called BetterShop. What I wanted was an aggregator that would allow you to search and sort for specific product characteristics to make comparisons, both for product meta data and ratings/reviews. At the time, it seemed like the shopping experience was more based on marketing and it made it difficult to compare products.
I developed a set of tools to parse product meta-data from Wikipedia and a website, in CHICKEN Scheme, that would allow for searching, sorting, and making comparisons. I never really finished or launched the product. After getting a prototype working, it quickly became clear that it was going to be a lot of work and it just wasn't something I cared enough about. It also seemed like the marketers of products did not want to make it easy to compare their products with competitors which seemed like it was going to be continually annoying to deal with and I just was not excited enough to put up with that.
It was a good experience though in building a more robust web application with extensive tests and fully automated setup.
Zillow: Overseeing Postlets and Machine Learning Development
Because I had more broad experience with other programming languages I also took on the role of maintaining another Zillow product: Postlets, which was written in PHP. I did not undertake any large projects while working on Postlets but I was responsible for fixing any bugs and making more minor updates, which I did.
Also, during this time I oversaw the machine-learning development for HotPads, which was being written in Python. I did not know do any of the development myself but lead, mentored, and code reviewed the engineers working on the machine-learning related aspects of HotPads. This was my first "professional" experience leading/mentoring other software engineers.
2012
MongoDB: Open Source CHICKEN Scheme Library
I was wanting to gain experience with a document-based database and at the time MongoDB was popular for that so I worked on using MongoDB and as a part of that, developing a CHICKEN Scheme library for working with MongoDB. I never fully developed this project because I ended up not liking MongoDB all that much. I could see some use cases for it but it just wasn't something I felt was a significant benefit over Postgres since Postgres already had some document store related features and I couldn't think of cases where I needed to more heavily work with documents in a way that MongoDB would be a better fit.
HotPads acquired by Zillow
While I was working as a software engineer at HotPads, the company was acquired by Zillow. I continued at Zillow as a software engineer primarily working on the front-end mapping interface for HotPads (JavaScript).
2011
Software Engineer at HotPads
In 2011, I accepted a software engineering position at HotPads in San Francisco. HotPads is a real estate and rental listing site, similar to Zillow.
My initial task when joining the team of about 7 engineers, was to rebuild their listing creation interface. They had an existing interface for users to input listings into their system but it was missing a lot of features and was difficult to use. I created the designs and UX, with feedback from the rest of the team, and then implemented the new version as a single page, primarily in JavaScript, with AJAX calls to a back-end written in Java. This was my first time working with a team this large and such a large codebase (I think it was around 4 million LOC, at the time).
After launching the new listing creation interface, I would move to working on many different parts of the HotPads web app, although over time, moving to do mostly front-end JavaScript programming. Java annoyed me more than JavaScript and there were other engineers that preferred to work in Java so it made sense. I became quite familiar with the code powering the map view of the listing interface, which was incredibly complex JavaScript with only a little help from JQuery and Underscore.js. Overall, my time at HotPads was another huge learning experience, especially as it related to working on a larger team and larger codebase.
HISS: Hintz Scheme Shell
Of course, using Scheme so much I really was itching for a Scheme shell. I tried some of the existing ones that I could find but I wasn't happy with any of their interfaces, they felt too cumbersome. So, I made my own!
The design of the shell is focused on making it easy to utilize common GNU shell utilities but converting the inputs and outputs to something more useful in Lisp, like converting the output of "ls" to be a Lisp list of strings. It is a very simple project but quite useful if your brain thinks more in terms of Lisp than BASH or ZSH or something!
2010
MDA, CHICKEN Scheme Stripe + HMAC, AWS, & SendGrid
As a part of creating the Keep the Records web app, I also developed a number of supporting CHICKEN Scheme libraries, with four out of the five being officially released to the public CHICKEN Scheme repository as open source libraries.
To support automating the payment process when user's were signing up for Keep the Records, I developed a library to connect to the Stripe API. I created this very shortly after Stripe launched and there was only official support from Stripe for very few languages, and that didn't include CHICKEN Scheme (why not? hehe). Honestly, this was a pretty simple library and the initial HTTP Stripe API and docs were so good that it took me about a day to create the library and write the tests and documentation.
A much, much more difficult integration library that I created was for AWS's S3 service. If I had known how difficult it would be I would not have done it. Unlike Stripe, Amazon's documentation at the time was absolutely abysmal. Even though I had the latest version of the documentation there were parts that were just plain incorrect and they did not have any easy way to test, especially in regards to generating request signatures. In the end, I ended up black-box reverse engineering other implementations. I did end up succeeding and released the library to the CHICKEN repo and supported it for many years.
To get the AWS S3 request signatures created I needed to generate HMAC's and CHICKEN Scheme did not have any easy way to do this using existing libraries so I also created a CHICKEN Scheme HMAC library. I was able to use a library from another language, with the same open source license, to make this library very quickly. Based on user reports and libraries that others made that depend on this one, it is actually, probably, my most popular open source software.
To send transactional emails I also created a CHICKEN Scheme library to integrate with the SendGrid service. This was not too difficult as well and I also released and supported this as a CHICKEN Scheme library in the public repo.
The largest library I created however was "MDA". It was a database management system built on top of TokyoCabinet and ZMQ specifically for Lisp. It layered a lisp-like, hierarchical, indexed, key-value interface on top of a distributed key-value store that used ZMQ to distribute reads and writes in a reliable, durable way.
I did not initially set out to create anything like MDA. Instead the
initial version of Keep the Records actually used files to store data
(trivially easy to do in Lisp with read and write). Of course, as
Keep the Records grew, this solution had many issues but converting it
to use a key-value store, like tokyocabinet, was actually quite
easy. The main challenge though ended up being because, for
reliability and performance reasons, I ran multiple instances of the
Keep the Records web application but they all needed to safely read
and write from the same data and tokyocabinet did not provide safety
across multiple OS processes or across nodes. To solve that problem I
created the MDA client/server interface where the server was the only
one that actually read or wrote to tokyocabinet and the clients
communicated with the server using ZMQ. This all worked and I even
created very thorough multi-threaded multi-client test cases to ensure
reliability and durability. It was also extremely fast.
I did not end up using MDA for much beyond Keep the Records and I never really promoted anyone else use it because it really didn't make a lot of sense and since then I usually just use Postgres or other already production ready DBMS's. It was certainly great experience learning how to build a somewhat robust DBMS and I would use some of these skills later on when working on a commercial database engine.
### Starting My First Successful SaaS Application: Keep the Records
At the time, I volunteered at a church organization that had a lot of record keeping required for children activities and check-ins. After awhile I learned that some other volunteers spent many hours every week inputting and maintaining these records on complex spreadsheets. I thought I could save them a lot of time by building an application specific to their needs, and thus, the Keep the Records web application was born!
I quickly built a prototype in CHICKEN Scheme and showed it to some of the other volunteers: they loved it! After incorporating some of their feedback and making it more production ready, the organization began using it on a regular basis. The volunteers continued to really appreciate it, especially how much time it saved them and how much higher-quality the records were.
At this point, I began focusing nearly all of my time on developing Keep the Records with the goal of making it publicly available as a paid SaaS application to other similar organizations. I ended up doing everything myself from designing and programming the application, to taking payments, and doing the marketing. Even though I had many years of programming experience, it was still a tremendous undertaking building out a fully production ready app by myself on top of setting up the business and doing the marketing; things I hadn't done on that scale before.
After a couple more months of intense work and testing in the field, I was finally ready to release Keep the Records! I will never forget the first few, real customers that signed up, some paying over $100/month! It was a really special moment to me seeing how I was able to completely build and market a non-trivial web application and actually get people to buy it. And those customers also really loved the product as well! It made me so happy making people's lives easier and better!
Well, aside from some times early on when the web app went down. It was a massive lesson for me in terms of running a web application at scale. I made a lot of mistakes in the early development that made the service less reliable and much slower than it should have been. But I also was generally able to bring the service back up and fix issues with a day or so and within a month it was running reliably and well. Customers also loved how they could report bugs or request features and oftentimes I would have them addressed within a day or two.
By far, this project as a whole was one of the biggest learning experiences I've had. And, it really proved to myself that I could do everything involved in starting and running a SaaS company (not that I necessarily think it is the best way to do it, but I gained experience with all of the aspects at least). On top of programming the application itself I also: did all of the UX and graphic design; created marketing materials and used various marketing methods for the product; setup marketing and application analytics; setup payment inputs and tracking; setup marketing and application mailing lists; setup a resilient multi-node deployment with automatic fail-over; setup and secured Linux host servers; setup and manage an application logging and alerting system; and built numerous integration libraries for CHICKEN Scheme that I would later open source.
thintz.com
Registered and setup thintz.com. Originally, I built a CHICKEN Scheme CMS web app to host the side, which allowed for creating, editing, and publishing content through an admin interface. (Later on I converted it to use a static website generator I also built in CHICKEN Scheme.)
2009
Can I Enable Cross-Language Debugging?
For a few months, I worked on creating an IDE tool that had the goal of allowing one to use a debugger across programming languages, in a way that was native to each language. So, in theory, one could step through code even when it called into other languages that were not based on the same intermediate representation and did not have anything necessarily in common.
I built a rough prototype that did allow for some of the debugging to occur between Scheme and C++ but never ended up doing anything significant with the project as it turned out to just be a lot more work than I could find time for (who knew, haha).
It was a really interesting project though and I learned a ton about debuggers and programming language implementations. The prototype essentially worked by creating source maps of languages and then utilizing existing debuggers to do the actual debugging by "translating" the source mapped code into a cohesive view. It was built primarily on some gnarly parser-combinators.
Building My Own Desktop Environment
I was both obsessed with the power of Lisp and also emacs and I wanted to carry it over to everything. At this point, many of the utilities I ran on my laptop, that ran Linux, were utilities that I had written. I was unhappy with a lot of GUI applications for doing things like connecting to WiFi networks or adjusting screen brightness so I just began making my own.
Eventually though I just wanted to have everything written in Lisp and, like emacs, I wanted to be able to do anything with commands or Lisp function calls. So I developed my own open source desktop environment in Common Lisp, connecting directly to the X server. I didn't put in the effort to maintain it long-term and KDE got a lot better after this, but for awhile I ran my own desktop environment and it was so much fun being able to easily do or script anything I might want. It was also a great lesson in how desktop environments work and how X works and just how GUI's are drawn, in general.
ExactShip: Testing Frameworks & C
I continued working at ExactShip, branching out in to new areas. I began to work more in C# both on desktop applications and servers as well as learning some MSSQL.
During the summer, when I was off university, I worked on-location in Milwaukee focused on developing software to automate UI testing for the company's various products. It was a tremendous learning experience creating many automated tests and software to make it easier to create and run tests. Unfortunately, even though it was my assignment by the company, I don't think they really understood what I was doing or how to use it. This definitely would later be a lesson to me on how to effectively communicate what I was working on and how to use it.
I also worked on various miscellaneous projects including my first experience with creating a distributed system. I needed to do a lot of processing, a lot more than my computer could handle, so I developed a master-slave distributed job based-system that all of the other engineers at the company would run on their computers, when they weren't being used, to do the processing.
2008
Lisp
I discovered the programming language Lisp. It was immediately super exciting to me because I had been growing frustrated with all the other languages I knew because I felt that they limited how high-quality you could make your programs because they limited the potential abstractions that you could create. Within a very short time of discovering lisp I realized it was way more powerful than anything I had used before and it quickly became an obsession. Anything I could I began to write in Common Lisp or Scheme. Looking back, my initial code was atrocious but I learned quickly how to not let the new-found power bite me.
Computer Architecture, CS Theory
Both inspired by some of my university classes and a lot of my own curiosity I continued broadening my understanding of computers. In the past, I had been focused on learning how to program in general and how to build high-quality programs. But now I was pretty good at that I wanted to learn more about how everything worked. This was a period of intense study and experimentation.
On my own and in classes, I learned everything from how to build processors out of gates, to discrete math, to building an Operating System from scratch. School itself was incredibly frustrating as it often felt like my classes were years behind my own understanding. I had to pay for university and all my living expenses and it was feeling hard to justify the cost to "learn" things I had not only already learned but had been using in practice at a real software engineering job.
ExactShip: First Paid, Professional Software Engineering
A friend I met in college had gotten a job doing software engineering for a startup, ExactShip, based in Milwaukee, Wisconsin. After we had programmed together on projects for awhile he introduced me to the company and they also hired me. I would continue to work at the company for the next two years, nearly full-time while also being a full-time university student.
At ExactShip, I primarily worked with my friend on a web-based interface to the company's shipping software, focused on Salesforce. The company had a back-end that connected to directly to shipper API's that automated creating shipping labels and rate shopping across multiple shippers. There software was primarily created for assembly lines in larger enterprises but our project was focused on creating a more consumer-centric web interface.
I primarily worked on a single-page AJAX-based web application, using JQuery. We, like everyone of the day, wrote most of the JavaScript code directly, using JQuery to help smooth-over browser inconsistencies. I built a calendar component along with many contributions to the rate shopping interface. I worked directly with my friend on the front-end and the other engineers at the company on integrating with their back-end.
2007
Aura Media Player
My first time seriously collaborating on an open source project with someone else! Previously I did nearly all of the development on my open source projects but at the start of university I met a new friend and we began working together on Aura Media Player (AuraMP).
AuraMP was a Java and QT based front-end for the open source MPlayer back-end. It was by far the biggest program I had worked on and it was super cool. I learned all about widgeting toolkits and threading and UI design. We ended up working together on AuraMP for years after this and built a really high-quality media player used by many people. My friend and I would often stay up until 6am the next morning programming together on AuraMP. (Then I would try to sleep for an hour before my classes started; not sure I always made it to my morning classes, oops.)
University for Computer Science
I started university for Computer Science at Michigan Technological University in the fall of 2007. I thought everyone going to university would already know programming and would like "the best" programmers. That is definitely the idea I got from the way "adults" had talked about college. That could not have been more wrong.
My AP Programming credits didn't transfer to university because they wouldn't allow transferring any credits that were related to your degree so I had to start in programming 101. The first day was devastating. They were starting from the beginning, from where I was five years ago! And even worse, nearly every person in the class of 125 had not even done any programming before!
Luckily, there were a few people that were more like me and had been programming for awhile and I quickly met a new life-long friend and we began collaborating on programs together.
Five years of programming!
By now I had been programming for five years and had learned multiple languages, released multiple open source applications, and was becoming more obsessed with learning how to create "high-quality" software. Initially it was so much fun to just create programs that did things but, of course, as those programs grew they became more unmaintainable and that set me off on the journey to learn how to create long-term maintainable applications. I began learning and experimenting with many different strategies from Java's Object Oriented Programming to Functional programming and much more. Throughout the five years I had been programming I was probably learning about or programming for an average of 6 hours per day (that may have lead to falling asleep in class sometimes, oops).
AP Programming
I also took "AP" programming my senior year of high school. It was supposed to be a "college level" course. My high school didn't offer much programming related classes aside from some very basic stuff that I had taken years ago. But they let me do independent studies in programming, including taking the AP Programming course. Unfortunately, I also had a back injury at the time and missed a large part of school due to surgery. I ended up having to do the entire AP Programming class, which was in Java, in two weeks. I didn't sleep much but I did do it.
I also learned C and C++ more thoroughly in a separate independent study class at school, building many programs in C/C++. It was fun learning about a "lower-level" way of building applications!
2005
Computer Repair Business
The first successful business I started myself and ran! For a few years, I would go to people's houses and fix their computers. It was a massive learning experience and I was initially terrified. I didn't have any "adults" that really supported the idea or helped me in any significant way and it was intimidating charging people, what seemed like a lot of money at the time (I think $35/hr).
It was also such a great experience. People were so happy with the quality and speed of my work. Most of my costumers had used more well-known services, like BestBuy to "fix" their computers before they hired me and every time they were amazed because BestBuy charged way more, took way longer, and usually didn't even actually solve their problems! They were especially amazed when I would tell them that they wouldn't lose any data. They all told me that "professional" services they got quotes from all told them they would lose all of their data or have to pay a massive up-charge.
I also just learned so much because most of the problems I was hired to solve I didn't actually know how to do it! And I basically just said "yes" to everything and then figured it out. A few times I lost money by screwing up and buying the wrong part or something but I never messed up a client's computer or lost any data for them.
It was also really great because I ended up having people just give me computers that they weren't using anymore after they had bought new ones. Usually the computer was perfectly fine but it had gotten too slow because it got a virus or something and the person didn't know how to fix it and BestBuy would quote them half as much as buying a new computer so that's what they did. So I would get the computer for free and fix it and then I gifted them to people that didn't have access to computers.
I also really enjoyed just teaching people about computers and software and how to use them. Most people didn't have a clue but they would tell me I was really good at explaining things to them in a way that they could understand. They also appreciated that I offered open source alternatives. I remember one teacher had a super old version of Microsoft Office that couldn't open the files that their work computer created because it was too old but they couldn't afford to buy a new Microsoft Office license. I downloaded and installed OpenOffice for them and showed them how to use it and they told me later that they used that for many years and it allowed them to work on documents that the school computers could also work on and saved them a lot of time and money. <3
2004
My First Computer
A huge milestone for me was when I bought my first computer. I used year's worth of savings from jobs I worked to buy my own computer! I wasn't allowed to have internet (dial-up) access but at least I could use the computer whenever I was at home!
The main operating system I used on it was actually Linux even though all the other computers I had ever used in my life until that point were Windows, DOS, and Mac. The reason I used Linux was because I had bought one of the first 64bit CPUs and at that time Windows didn't support running in 64bit mode and I felt like it was wrong to not use the full power of my CPU. A friend of mine told me there was this thing called "Linux" that actually did run in 64bit mode. So I got my start with that computer, and with Linux, from a set of CD's that contained Red Hat Enterprise Linux. I would later swap that out for "Fedora Core".
It is funny to think about how much I tinkered with that computer to get it to work. I had bought a USB flash drive, I think 128MB, and when I wanted to install a program I would go to school and use the internet there to download the package file for the program. Then I would inspect the package file and find all of its dependencies and download all of their package files and repeat the process until I had downloaded all the package files to the USB drive. Then I would go home and install all of them. I often messed up so generally it took me a few days of that process to install anything. (Our dial-up internet on the family computer was way too low-bandwidth for that).
It was "sneaker-net" for real for me back in those days. I would often get a little access to the internet at school most days so in the interim I would build up lists of things I wanted to look up or download when I got internet access and then as soon as I did I would download/copy everything to the USB drive so I could later use it on my computer.
Of course, I also was writing endless programs at this time and learning all of the programming languages that I could. I believe I was learning Java, Perl, JavaScript, C, and VB.net at the time along with more HTML and CSS as I continued to make websites.
First Open Source Program: AP Flash Cards
I discovered open source software pretty quickly and I wanted to make my own. The first serious one I published was originally called "AP Flash Card" and later renamed to "XRF". I published it to Sourceforge and released the source under GPLv2. It actually got a not-insignificant amount of downloads, I think a few hundred per month!
It did what it sounds like: provided a virtual "flash card" interface for learning AP terms ("AP" is the designator for "college level" class that we could take in High School). I would build word lists for the AP classes I was in and include them with the program. I had classmates that would download the program and use it to learn the terms. I built the program with multiple "modes" that all had different techniques to help you learn terms and test how well you had learned them.
I'm pretty sure I spent more time writing this program than I actually did studying for my AP classes but it ended up working out as the teachers usually gave me a lot of extra credit for the program haha.
It was super exciting though to have released a real, actually useful program that real people used and got value from and provided feedback on! I updated and maintained it for the next few years.
2003
Cryptography
The other big program I created this year was a cryptography program. I was obsessed with computer security and learning everything I could about it. I also had an issue where classmates in my programming class would try to steal my code. So I learned how to implement an encryption algorithm that I could run over my source code whenever I wasn't at the computer. It worked great. :D I think it was an AES algorithm? I always told my classmates I was happy to help them with their programs, and many of them took me up on that offer, but a few would just try to sneak to my computer when I wasn't looking and hit the "print" button on my source code which annoyed me.
I was super in to "perfect" cryptography and I learned about one-time pads. So I also implemented the one-time pad algorithm and I would actually carry around store devices or even printed out keys for one-time pads. Hilarious to think about in retrospect but it was really fun to learn about and implement at the time!
I guess I was also paranoid? I also implemented Stenographic approaches so I could hide the encrypted things inside images. That was so cool to get working! Don't think it was anything I ever actually needed but boy was it fun to make!
Games
I made my first games this year: a re-make of Frogger and some other more silly games. I built these all in Visual Basic 6. They were a lot of fun.
The biggest game though was I built my first multi-player game: "The Stock Market Game". I built this in VB6 as well and I would play it with my siblings and Dad. We would all sit around the family computer and play it for hours. In between play-sessions I would work on improving the game or fixing bugs. It ended up being a pretty fun and complex game, complete with its own internal simulated market economy that I had created! A big lesson I learned though was that there was a big difference between making something "realistic" and making it fun.
It was also a huge lesson in user experience design. My Dad, especially, did not like trying to understand UI stuff so I really had to learn out to create interfaces that were intuitive and easy to use. It was a lot of fun though sketching out UI's, implementing them, and then seeing how people responded.
Becoming A "Real" Programmer
I very quickly fell in love with programming and did it all the time, even though I didn't always have access to a computer. At school, when I did get access to a computer, I would find programming books on the internet, and when the teacher wasn't looking, I would print off the whole book; often hundreds of pages! Then I would spend most of the evening and night reading the books (I often slept during my school classes but usually still got A's, for what that's worth).
I also took my high school's "programming" class that year. It was in Visual Basic 6. I read our course book and completed most of the assignments in the first week of class; I didn't sleep much.
When I didn't have access to a computer, which was most of the time, I would write out all of my programs on paper. Then I would use a separate piece of paper to simulate the programs with different inputs. The goals was to have programs fully working and debugged before I got access to a computer, that way once I did get access to a computer, I could just type in all the code and verify it worked by actually running the program with all the inputs. Oftentimes, I would only get access to a computer for long enough to type in all the code and run the program so I would also often include comprehensive debug logging statements and if anything didn't work as expected I could just print out all the debug messages and then do the actually debugging on paper; computer time was too valuable to be wasted on debugging!
2002
Launching My First "Startup": "Wizard Shop"
The cousin that introduced me to programming was doing what he called a "startup". I thought it sounded like a good idea and I wanted to make some money so I created my first "startup".
I created an e-commerce storefront--of sorts. It wasn't really a startup but I was in middle school and I had no idea what I was doing and neither did my parents or anyone else I knew.
What I created was a storefront, that I hosted on Geocities, made up of affiliate ads! I didn't know how to actually sell stuff online but somehow I discovered you could join affiliate programs and they would give you snippets of HTML and images that you could put on a page that would link the user to their site to actually buy the product. So I created a directory made up of affiliate ads.
As far as I know, nobody ever actually found the site or used it but it was fun to create! I used to dream people would find it I would be rich haha.
First Code
Wrote my first code! I was in middle school and on a summer trip a cousin showed me how he made websites: using HTML and Notepad. I asked him how I could learn to do it. He told me to do an AOL search for "HTML tutorial". As soon as I got home from the trip, I sat down at the family computer and dialed up the internet, and did just that, teaching myself HTML and how to make websites.
I also got some Borland C++ books from a school friend and I think I learned from that as well but it was quite overwhelming at the time!
