I have been programming since about second grade. At first I just wrote a few programs in BASIC, but never really got into it. Two years later in fourth grade, I was introduced to Scratch, and I immediately loved it since the block-based nature was very intuitive and more fun to use than text. As time went on, I started learning more advanced languages, building random projects along the way.
I don’t have a specialized area as much as many other software developers do, but I have a strong focus on design. Design is the core of good software and the bane of bad software.
One class I took in college is important enough to merit its own section on this page: EECS 293: Software Craftsmanship (now CSDS 293). That class was more than just a class on code quality, it taught an entire philosophy of software development. The philosophy included a number of different aspects, including emphasizing simplicity, designing for maximum flexibility, not compromising on quality/correctness, making sure developers actually know what they’re doing and don’t just cobble things together, and remembering the human aspects of development. The most important part of the course was the discussion sections, where we would present our weekly projects in a small (ten student) code review. During the code review, the discussion leader would look at our code and find both what we did well and did poorly. These discussion sections both gave immediate practical applications for the material learned in class and also forced us to make sure we really followed the development process correctly and didn’t just blindly follow a rubric.
After taking the class, I was selected to be a discussion leader the following two semesters (after which I graduated). Being a discussion leader further helped me gain an appreciation for the importance of a quality approach to software development. At that point, not only did I have to be able to write high-quality software myself, I had to be able to understand others’ software, explain the processes, identify strong and weak points, guide students through various problems, etc. The variety of code I saw greatly improved my ability to understand others’ code and further cemented my understanding of the craftsmanship mindset.
That class fundamentally changed my mindset about programming. The mainstream software development community seems to have an attitude of just “do what works,” but thanks to that class I have a much more rigorous mindset. I take every project I am involved with seriously, believe in designing ahead of time to the extent possible (while making the design flexible to allow it to be modified, extended, or further fleshed out as I go), and writing high-quality software. I no longer just produce something that works, I produce something where I know why it works and am proud of it. There is a massive difference in my software from before I took the class and after.
I am familiar with the following programming languages:
- HTML/CSS (yes, I know they aren’t programming languages, but they’re worth including)
Of these, my favorite is probably C++ due to its hardcore nature.
You can find a collection of software that I and a few of my friends have created at futuresight.org.
Probably my most notable project is the Cleveland Transit application, a mobile app to help users navigate the public transportation in and around Cleveland. It includes a live map showing all nearby stops and their upcoming arrivals, as well as service alerts and escalator/elevator outages at rail stations.
Along the way, I have also created a few other noteworthy projects, including:
- FutureBB, a basic internet forum system, balancing a lightweight nature while still including what I saw as necessary features
- ÉamonBB, a different forum system created for my Databases class, which is primarily designed to move as much logic to the database layer rather than the application layer (the source code is not publicly available since it includes my CWRU email address)
- RentConnect, a basic system created for my Software Engineering class for landlords to manage their properties and communicate with their tenants
- The Scratch Wiki Account Request System, a modification of the MediaWiki ConfirmAccount extension that adds integration with Scratch
- Insanity, a modification of Scratch 1.4 designed to add more advanced features
- The FutureSight Website, a website to showcase software I and my friends have written
- SecureSwitch, a basic proof-of-concept end-to-end network encryption system using RSA
I worked two summer internships in 2018 and 2019 at TransEnterix, Inc., a surgical robotics company based in Morrisville, North Carolina. Their main product is the Senhance system, a laparoscopic robotic surgery system.
Starting in June 2020, I will be working as a Solutions Engineer at BlueBolt Solutions, a web solutions firm in Chicago.
While most of my coding so far has either been individual or for school projects, I also am a backend engineer on the Scratch Wiki. As mentioned above, I implemented and maintain the integration of the account system with the Scratch website. I also am responsible for making sure everything runs smoothly, which includes routine server maintenance tasks as well as occasionally diagnosing and fixing problems and managing upgrades.