Programming Process

Every programming project is unique and the plan of often varies with the goal. However, I’ve developed a general outline of the steps I use to expedite my projects. I’ll walk through an example of a project I did recently LINK TO Card Memorization BLOG POST. Since I think this project is an illustrative (and interesting) example.

Problem Definition

The first step is defining a problem. I typically sketch out the things I’m looking to do on my iPad using the Notability app. This app has been an absolute game changer for my productivity. It allows me to quickly draw mind-maps, record voice memos, draw graphics and write outlines. I have a separate blog post going into more detail about this app (LINK) but I encourage readers to investigate it.

During this stage, I do a brain dump of the things I’m looking to accomplish. Momentum will often build at this stage and I try to envision what the final product will look like. This is still the idea stage so I don’t let myself get hung up on the technical details.

  • Here’s an example of how this looked for a project I did recently. The goal of this project was to develop a tool to track my progress on improving memory.

Jupyter Notebooks 

Once I have a clear idea of the goal and I’m ready to start programming I’ll use a Jupyter notebook to translate my outline into functional stages. Depending on the project, I will often do some exploratory data analysis (BLOG POST) this stage. Here’s where I dive more into the technical details and refine the structure of my approach. Jupyter is great because you have inline results and you can easily sketch programming ideas. There is also a broad community of resources that I consult during this stage.

My go-to resources

Jupyter also has the ability to incorporate markdown tool so I can have a report style presentation with Latex and background information inline with the code. A side note, Jupyter also has some great functionality for presentations (link)  and methods for exporting code to other useful formats.

Some projects take just a few hours and others take longer periods of time. Markdowns in Jupyter are helpful because you can easily come back to a project months later and see where you left off and what the thought process was.

PyCharm

Lastly, I’m interested in taking projects I’ve developed and sharing them with the community. To do this, I will revisit the Jupyter notebook and translate it into a .py file using Pycharm. The point of this is reproducibility. I’m interested contributing to the programming community since I’ve benefited greatly from the work of others.

When working from PyCharm, I’ll create a virtual environment where I install all the necessary packages to run the programming and so I can later share that environment as a .yaml file.

When the project is complete and I’m satisfied with the results, I’ll do some final touchups and documentation in preparation to share the results. This includes cleaning up the code and writing a supporting document. The cleanup is aimed towards readability. I want other people (and my future self if I come back to a project, to quickly be able to understand the process. PyCharm’s makes translating code into compliant with PEP 8 extremely easy for a novice programmer.