This week I started Recurse Center.
My goal is pretty simple: learn a lot more about programming and get a lot better at it.
As I start exploring the little corner of programming I have chosen to focus on, I wanted to note where I am starting from. Then, when I'm done, I'll be able to look back and see how many branches of the knowledge tree I've explored - deeply or at the surface.
So here's a summary of what I know about programming.
In college I took Introduction to Object Oriented Programming I and II. I worked in Java. From those classes I have a pretty strong grasp of the basics of OOP. I also have a good grasp on basic algorithms and data structures. But I didn't take a class explicitly on algorithmic analysis, so this is an area to go deeper.
When I began at Capital One as an analyst, I spent a lot of time teaching myself how to wrangle data with SQL and then Python / Pandas. This got me familiar with Python - which I quickly preferred over Java. I learned a lot more as a PM, I'll circle back to that.
I had a lot of design experience and built a new no-code apps. Then I decided to teach myself to build real code apps. About a year ago I taught myself a fair bit of Django. I built and deployed a handful of basic tutorials, like a blog.
I also built a few more complex apps. I built a Twitter clone with a horrendous UI. But I was proud that users could log in, have a profile, a feed, etc. I even figured out a follower system from scratch and was happy about that.
Then I built a platform that allowed users to create their own job board. There were 2 types of accounts: job board hosts and companies. This had lots of different functionalities - but again with an ugly UI.
- A host could create an account and job board
- Employers could submit jobs to a host's board
- A host could then review and accept or decline postings
- These would be available on the web for a host to share
- Both hosts and employers had dashboards where they could see analytics on how many times posts had been viewed, links clicked through, etc.
- There were lots of different authorizations and permissions.
It probably took me 20 hours to build that. But I had never made anything so complex before. Getting a taste of what I could make in 20 hours with so little experience made me wonder what I could do if I focused on programming full time. And that's what brought me here.
Since I put that project on the back burner, I've been reviewing the fundamentals of programming, how programs are structured and interpreted. I've been using composingprograms.com as a resource to do so. Which is a condensed, Python based, version of The Structure and Interpretation of Computer Programs. That's been eye opening and helped me really understand some of the things I learned in college on a much deeper level.
It's also worth noting that in my year and a half as a PM on Capital One's Machine Learning Platform, I learned a hell of a lot about software engineering and data science. I learned a lot about how models are built and deployed in industry. I learned a lot about Kubernetes, Docker, containers, and scalable software infrastructure. So I think that will help me bridge the gap from novice to decent programmer much faster than I might have otherwise.
I'll follow this up with a separate post on my goals for RC. But just to provide a glimpse, some of my immediate plans include:
- Getting familiar with, and building a few projects using, Django Rest Framework.
- Getting the minimum React knowledge I need to start connecting a Django back end and build some projects.
- To train and deploy a ski-kit learn model, which a user can then interact with (send inputs, receive outputs) via a web interface.
- Finish Composing Programs
- Start reviewing Algorithms again.