My Plan for Recurse Center
The other day I asked myself: if I was to get to the end of RC and feel disappointed, why might that be? One answer stands out as most likely: I didn't focus enough to get good at any one thing.
This realization inspired me to refine my curriculum a bit. What I'm going to shoot for is a balance of exploration and depth.
I'm a naturally curious, explorative person. In many ways, that's what I've come here to do. Explore. If I imagine that I had to pick between two paths: 1. Focus exclusively on getting good at one employable skill, 2. Explore different areas of programming and find what excites me the most. I would without a doubt pick 2.
I think I can do both. My plan for RC is to explore a few different things I'm interested in, while doubling down on getting good at one thing. If I get to the end of RC and have figured out what area of programming I want to dive in and get really good at, I'll consider that a win. If I get to the end, have done not only that, but have began the journey of getting good, that would be amazing.
Much of the value of doing something like RC is allowing yourself to get exposed to new ideas. By doing so you might find something completely new that you are excited about. So I plan to allow myself to follow my interests. That being said, I think it's good to a have a default work plan. I heard a quote today that put it nicely: 'plans are useless, but planning is imperative.'
So the purpose of this post is to share my plan.
These are the areas of programming that I'm most interested in:
- Web Development (back end focus)
- Computer Science fundamentals (algorithms, data structures, networking)
- Machine Learning
Those are roughly in order of how much time I plan to spend on each. With that context, here's my rough plan:
For the first six weeks I am going to focus on building web apps. Specifically, I'd like to focus on building interesting back-end services in Python. I've thought a lot about full stack vs. front-end vs. backend in addition to whether it makes sense to focus on Node/Express for back-end (which is hot right now) or Python. My thought process there could fill a whole post. But in short, I like Python, like Django, and want to do things with ML later on. To me, sticking with Python makes the most sense.
I'll start out by reviewing some of my old Django projects before moving into exploring Django Rest Framework. I don't want to work as a front end developer. So I am going to try to focus my energy on back-end. That being said, I will want to allow users to interact with what I build via some sort of front-end. So once I start to feel limited by my current front-end skills I would like to take a week or so to explore React. Admittedly, this probably isn't necessary. I could take a more functional approach and let my projects dictate what I work on. But React is just something I'm curious to get some experience with. I'd like to then build and deploy a few projects with DRF and React.
Concurrently, I'd like to block some time everyday for CS stuff. At first this time will be spent on finishing the book Composing Programs. Once I'm done with that it will be dedicated to studying algorithms. I'll do LeetCode problems but also work through the book The Algorithm Design Manual.
And that's how I'll spend my first 6 weeks. Building web apps with Django and React. Reviewing the core parts of CS. Pair programming a lot.
After 6 weeks, I'm going to check in with myself and evaluate how to spend the rest of my time.
Here's some things that I'd like to tackle, roughly in order of priority / probability that I'll get to them:
- Train an scikit-learn model, deploy it, allow a user to send it data via a web app.
- Explore other Python web frameworks. Specifically, build little projects with Flask and FastAPI.
- Train a more complex model.
- Explore Solidity. Spend a week cranking through Buildspace projects.
Here's some things I would love to do but won't commit to:
- Clone a DRF app using Node/Express to see how I feel about it.
- Deploy stuff via containers and docker.
- Deploy a ML training pipeline using a tool like Kubeflow, Sagemaker, etc.
High level, that's the plan. At the end of RC, I'd like to
- Feel like I can confidently build web-apps (especially from a back-end perspective).
- Feel comfortable with algorithmic design and analysis questions.
- Feel like I have a much stronger grasp on the various areas of programming.
- Know what area I'd like to focus on going forward. Right now, I'm thinking that's between back-end web, ML, and blockchain.
For now, I'm not thinking about jobs. When I signed up for RC I really had no idea whether I would re-enter work as a product manager or engineer. I'd say that's changed and I would like to pursue an engineering role. But, if I find a PM role I'm really excited about, that's cool too. More thoughts to come on this later.
For now, I'm just excited to start writing code.