Programming

I’m a self-taught programmer dabbling in Swift, Python, and Scheme.

Programming Education

I’ve been utilizing great educational resources to learn to code. Some of the courses I’ve worked through include:

Swift Playgrounds on iPad

I started out working through the Learn to Code tutorials in Swift Playgrounds on iPad as a refresher to get me back to coding. Aside from occasionally spelunking in code as a technical writer, the last time I had written code was on a Commodore 128 computer in the mid-90s as a pre-teen.

I later discovered that Apple’s Learn to Code tutorials are similar to the Karel sections of Stanford’s CS106A; introducing students to programming logic, basic functions, etc.

Xcode 10 and Swift 5 Courses on LinkedIn Learning

The next logical step was to download Xcode and start writing “real” code on my computer.

These courses introduced me to Xcode – since I had mostly used Atom prior to that in my technical writing background, learning Xcode definitely warranted its own course – and gave me some fundamentals to get started in Swift. The Swift 5 course is a beginner course that covers things like common data types, conditional logic, functions, methods, classes; the fundamentals that you need to get started writing code in Swift.

AP Computer Science Principles with Swift

At this point, I started the data modeling for the Swift app I want to write, but still wasn’t sure how to go from “I understand basic coding concepts” to “write an app.” This is when I started working through Apple’s AP Computer Science Principles with Swift book.

As I worked through this book, feature creep became an issue, and then the app I wanted to write morphed into something else. I took some time off for health issues, and when I came back, I wasn’t sure what to do with the project it had become.

Stanford’s Code in Place Program

In April 2020, I joined Stanford University’s Code in Place program to work through material from Stanford’s CS106A class; an intro to coding with Python. I was amused to see the Stanford course started out teaching basic programming logic via Karel, similar to the Swift Playground Learn to Code tutorials I worked through on the iPad in 2019. The work for Stanford’s Code in Place program was completed in PyCharm, which I’ve grown to quite like versus the very opinionated Xcode.

By the end of this course, I had completed a final project that was my first Python app; Scrup, a software documentation screenshot inventory command line tool. I’m proud to see it on the Code in Place Project List, alongside the other ~1700 final projects that came out of the ~10,000 students who started the program.

MIT’s Structure and Interpretation of Computer Programs

In addition to working on actual coding projects so I can get experience with code, I’m continuing to build on my self-guided computer science education. I’m currently working through MIT’s Structure and Interpretation of Computer Programs textbook, along with the class videos available online, to improve my grasp of computer science fundamentals. This course involves computer science logic and fundamentals in Scheme (MIT/GNU Scheme, specifically). I’m using the DrRacket IDE to work through this course.

It’s interesting to work through this with my husband, who is a self-taught senior web developer of ~20 years. Even with his practical experience in the field, he’s finding new and interesting things coming through this course, so I’m enjoying the blend of practical experience and computer science fundamentals that I’m getting through these parallel tracks.

Programming Projects

Scrup

Scrup is the Python program I wrote as the final project for Stanford’s Code in Place course.

Scrup consists of a few components:

  • Enables a user to build an inventory of screenshots, creating a relationship between the screenshot and the page in the software UI where the screenshot was taken
  • Connects with a visual diffing tool’s API to track when those software UIs contain changes in different environments, such as staging versus production, etc.
  • Generates a list of affected screenshots for the user, so the user knows which screenshots must be updated based on which UIs have changed.

I’m currently in the process of rewriting this tool using classes, which were out of scope of Stanford’s Code in Place class, and then I’ll release an open source version for other technical writers to use.

The next step I plan for this tool is to hook it up to Django so less technical users have a web UI where they can interact with the tool, and then I’m hoping to incorporate something like Phantom JS or Selenium to automatically generate screenshot updates.

Better Coffee iOS App

The Better Coffee iOS app started as a way for me to track which coffee beans I buy from which roasters, and whether I like them. The data model morphed to include things like tasting notes, roast level, and brewing details, so I could create algorithms to track my preferences and make recommendations when I visit new coffee roasters.

Then the feature creep really took off…

I fell into the classic trap of a new developer: trying to do too much, too fast. After turning the project into a hot mess, I took a step back and paused in development.

After completing the Stanford course, starting on the MIT course, and working through more computer science fundamental concepts, I’m now interested in making a simpler version of this app so I can actually start using it. I may revisit some of the feature creep in a future version. Unfortunately, in my time away from the app, SwiftUI has become a thing, so I have a little more learning to do before I can dive back into this.

After I get my Python project to a good state for I and others to use, I’ll be returning to this in my quest to make Better Coffee.

SSGs, Git, YAML, JSON, REST APIs, HTML, CSS, Markdown, and More

In the course of my day job, I’ve acquired an alphabet soup of acronyms as skills.

I do my technical writing work primarily using Markdown in Atom. I use a docs-as-code workflow to create content in Jekyll and Hugo, commit it and push it to GitHub, and collaborate with a team to review the work as pull requests. Our fabulous sys admin/architect has created a build script to automatically rebuild the live sites when PRs are merged into main.

I currently do some light work in HTML and CSS as needed to add features and improve styling on our static site generator websites, although I’ve dabbled in front end development more heavily in prior roles.

I sometimes write YAML config files for our documentation site, and I’m working with JSON and REST APIs for my Python app. I’ve also worked with all three in writing documentation for open source projects in the last few years.

I learned Docker last year for a technical writing project. I hovered around the edges of K8s for another technical writing engagement.

Basically, I’ve touched a variety of development technologies even in my non-programming roles, and am confident in my ability to learn any tooling required for a role or project. Between online courses, books, software development communities, and having a social circle composed almost entirely of developers and IT professionals, I’ve got a ridiculous number of resources available to help in my learning endeavors.

And of course, the best way of learning is doing, so excuse me while I go work on my SICP homework…