Recurse Center: Part 1 of 2

Time sure flies when you’re having fun. I’m already halfway through my 12 week batch at the Recurse Center. Here’s a bit about what I’ve been up to.

First Half

Ubuntu

I decided to start running Ubuntu. I hated running windows and wanted to be able to learn UNIX commands. I like the ability to have greater control over my environment, although it’s definitely come with some headaches. These have provided me with some great learning opportunities and I’m excited to get into more.

Using the Command Line

I don’t really have much exposure to the Command Line so I’ve started learning it from scratch. It has been so much fun learning all the commands and manipulating the things I need right from the shell. The lectures from the Missing Semester of Your CS Education are super helpful for learning core shell functionality.

I’ve also gotten really familiar with git and submitted my first pull request! A fellow recurser set up a event to collaborate on the Git Murder Mystery which was a ton of fun! I was really surprised at how much effort was put into the mystery.

I use Kitty as my terminal emulator (I also learned about what the shell and terminal emulator are and the difference 😄). I spent a lot of time reading the documentation and playing around with the possible customizations. I set up some sessions which do the trick for me for now. I don’t think I have a need to learn tmux yet, but we’ll see if that becomes necessary as time goes on. I’m pretty proud of a little function I wrote that launches a new session for my blog so I can see my server session and text editor side by side:

function blog () {
    id="$(kitty @ new-window --new-tab --title "blog" --cwd ~/Documents/hugo/blog/quickstart/content/posts)"
    kitty @ new-window --match "id:${id}" --title "blog-server" --cwd ~/Documents/hugo/blog/quickstart/
    kitty @ goto-layout --match "id:${id}" tall
    kitty @ resize-window --match "id:${id}" --increment 25
}

I’ve spent a bit more time than I’d like to admit customizing my shell with Oh My Zsh. Although this probably isn’t the most productive way to spend my time, it’s given me a lot of familiarity with the shell and config files. Learning how to install and interact with certain plugins helped me understand the shell better in general. This research also led me to discover some “out-of-the-box” functionality that replaced the need for a plugin. Aside from enabling a few obvious features like syntax highlighting and auto-complete, these are some of my favorite tools:

  • Exa for improved readability of ls output
  • Ripgrep is so much better than grep
  • Powerlevel10k for customizing your theme
  • Autojump for super fast directory navigation from anywhere. It learns your most common directories and you only need to type a few letters of the sub-directory to jump to anywhere from anywhere

Learning Vim

I’ve spent a bunch of time learning Vim and am really impressed so far. I love the philosophy of modal editing. It takes moments to open and edit files in the command line. I completed the vim tutor and read a few articles on some other functionality. It was a painful few weeks coming up to speed, but I think I’m finally starting to see some improvement in my speed compared to before I used vim.

Cost of Drinking and Learning Pandas

I collaborated with a fellow recurser on their idea for a project to create a map to visualize cost of living through the price of beer, bread, and coffee in cities around the world. I was responsible for scraping and cleaning the data from a couple different sources. This was a much bigger undertaking than I expected and I encountered tons of road blocks. I appreciate my colleague’s patience and feedback as I kept working through all the different scenarios that arose. I learned a lot about how to look for edge cases and handle them as they come up. There were issues like duplicate city names from different countries around the world, different spellings, broken links, handling currency conversion for cities not in USD, null values, and more. I learned a lot about Beautiful Soup and HTML in general.

I studied Pandas in order to clean the data that I scraped. I watched Corey Schafer’s Pandas Tutorial and did a number of the problems from the 100 Pandas Puzzles repo. I did this practice in Jupyter Notebooks which were also new to me. It was really convenient being able to run one cell at a time as you go through manipulating the data. Getting used to Pandas coming from the world of excel will be difficult. Vlookups and pivot tables in excel are second nature to me, so it will be hard to break the desire to just open a spreadsheet and manipulate the data quickly. I started playing around with all my personal transaction data to try to get a better understanding of the questions I could ask and solve with Pandas.

Mastering Large Datasets with Python

A fellow recurser set up a book club to read Mastering Large Datasets with Python and we finished the book in 6 weeks. The beginning of the book was a great introduction into MapReduce and encouraged me to adopt this style going forward. The rest of the book provided a synopsis on using Hadoop, Spark, and AWS. I read the chapters to get a better understanding of these tools, but I didn’t spend as much time practicing the problems since I don’t think I’ll be using these tools anytime soon. I learned a lot since this is all quite new for me, but I can’t say I recommend this book.

Plant Tracker

I began implementing my Plant Tracker idea. I want to create an application that allows you to log your houseplants and track information like watering, fertilizing, re-potting, etc. This has turned into a much bigger undertaking than I originally planned. I used this as an opportunity to learn PostreSQL. Originally I planned on using Flask as the front-end but quickly realized it would just be too awful and there would be webpages everywhere. Instead, I’ve decided to learn JavaScript to create the front-end. I think learning new tools and understanding how to tie them together into a cohesive application will be useful for me. Unfortunately, this is taking me away from shorter projects that I could add to my portfolio and may potentially have more learning payoff. Creating this on my own gives me a lot of opportunity to think creatively and deal with questions about design that I may otherwise not encounter with a smaller project.

Databases

I began reading Designing Data-Intensive Applications which is probably a bit advanced for me right now, but has tons of great information about how to think strategically when building a data intensive application. Weighing the pros and cons of different software is essential to longevity and scalability of your applications. I’ve also taken a course on SQL and decided to learn PostgreSQL. I’ve spent some time both learning the PostgreSQL GUI and how to work with the command line utility. Previously, I’ve only had exposure to building a small project with SQLite.

Web Development

Given my decision to start integrating JavaScript into my Plant Tracker, I decided to start down the path of learning Web Development. I completed the Responsive Web Design track from Free Code Camp. I’m in the process of watching the lectures from CS50 Beyond and CS50’s Web Programming with Python and JavaScript. I plan to use The Odin Project as my guide for this journey.

Recurse Center Events

I’ve attended a bunch of interesting events from the Recurse Center. There are weekly presentations where everyone shows what they’re working on. These have been super inspiring for me. Recursers also give off topic non-technical talks on a wide range of topics that I otherwise wouldn’t be exposed to.

Other folks have been kind enough to set up discussions to deep dive into specific topics that people have questions on. A few that I’ve attended so far include a talk on LISP macros, how Linux containers work, and a deep dive into SQL.

Reading the messages on Zulip has greatly expanded my vocabulary and I have a better sense of the tech world in general now.

Game nights have been fun too and I learned about a fun type of puzzle called Nurikabe!

Reflections

My experience has been exactly what I’d hoped so far. I love that I have access to a community of like-minded folks interested in improving their programming skills through this community and self-teaching.

I still feel woefully behind on all the terminology everyone around me uses. There seems to be this fundamental knowledge gap in my general understanding of programming that I’m not sure how to learn. I think it’s just a matter of time and experience and it will get better.

I’ve gotten so much better at reading documentation. When I first started, it was super overwhelming to understand all the syntax, shorthand, and expected previous knowledge when reading the docs. I’m slowly moving away from the crutch of YouTube tutorials and am venturing into the territory of finding the information I need on my own.

Next Half

For the next half of my batch, I plan to continue learning web development. I’m going to try to handle a mix of working on my plant tracker while doing a few smaller projects to practice my skills. I’m going to try to get a bit more socially involved than I have been and learn more about what others are working on. I’d like to start learning algorithms and doing some leet code problems more consistently.

Ultimately, I plan on participating in RC nearly as much once my batch ends (but hopefully with a few trips to the mountains in between 😉). I still don’t feel ready to look for jobs any time soon, so I may push off the algorithm studies depending on how I’m progressing with The Odin Project or if I pick up anything else.