Init
29 December 2022
Re-establishing the problem-solving habit that I used back when I was working my way through CLRS. My goals and needs have changed in the years since then, so I have some thoughts on how to productively go about this.
I had it in my head to construct a custom setup for all this. Make a collection named _posts
and map it similar to how I setup CLRS. I got a bit flummoxxed when Jekyll took no notice of my new collection, and after a bit of digging I learned why! I am sufficiently impressed with how straightforward this is.
So why establish a blog? The plan is based on missing the routine I had established a few years ago when I was hard at work on CLRS problems. At best, I was working one problem every day. This was a bit of a challenge to balance with my other duties at the time, and it lead to me favoring the simpler problems so I could maintain my streak. Naturally, this wasn’t sustainable and I lost interest.
But now I’m interested in picking it back up. But when I think about the system I was using before, I have some thoughts on how to improve it. As usual, my thoughts prefer to be presented in a bulleted fashion:
- First and foremost, let’s extend the timeline allocated to each problem. I’m upping it from one per day to one per week. This is so much time that it will encourage (I hope) getting playful and clever with the problem. If it’s simple to solve, maybe I’ll solve it multiple times in different ways. Or maybe there are some tangential concepts that I could tinker with if the problem wasn’t all that interesting in the first place. Even if it’s a super busy week, I should still be able to find an hour or two to apply myself to the problem at hand.
- With the extra time, I want to focus on documenting my thought process in solving the problem. As I look through CLRS solutions from years ago, I am certain I could figure out how I got to the answer given enough time. That’s not super helpful though, though I admit I get a certain amount of pride from looking at a complex solution that I crafted even if I don’t understand it now. One of the core purposes of this site is as a sampling of what my problem-solving looks like. My ability to document my thought-process is as of yet absent, and I’d like to correct that. I plan to use this blog to document my efforts across the week and will let the solutions stand alone and even in a separate repo because I like that pattern that I established for CLRS.
- That brings me to CLRS itself. It was a blast getting an exposure to the ‘hard-CS’ side of things, and I think I’m a better developer for it. Nowadays the thought of buckling down and brushing off my ability to mathematically express the underlying concepts of Big-O notation feels like moving backwards. I believe all develoeprs must find a balance between the academic and the practical, and so swingeth my pendulum towards focusing on things that will matter in my day-to-day. So the third thought that I have about this new initiative is I’d like to switch up the source I use for problems to solve. I am thinking of using Cracking the Coding Interview.
Cracking the Coding Interview (CCI from now on) is an interesting book. I picked it up while job searching and spent some time with it but then quickly got an offer and placed it on a shelf for glancing at from time to time. The first 50 or so pages were a succinct retelling of Big-O notation concepts that I had to claw out of CLRS, but here they were described in helpfully plain terms and with an eye towards some surprising inconsistencies in how the concepts are translated from textbooks to interview conversations. If I found myself in a situation where I needed to quickly brush up on these concepts, I would spend a few hours with this book before cracking open CLRS.
Past that front section, the problems were much more practical than what I was working on out of CLRS or SICP at the time. They really felt like problems that might come up during project work, and in a couple of cases they resembled very closely problems that I had worked on before. I’m eager to look at them again and see if my initial impression was accurate and if the extra two years of experience will impact my thoughts on the matter.
Maybe I’m wrong and CCI won’t work as a source for problems that I intend to spend a week on at a time. That’s ok and I’m open to switching things up. Perhaps I’ll take more than one problem across a week or maybe I’ll shop around for other sources. The important part to me is to establish a maintainable habit of problem-solving at a level that is always going to be practical in some way. I will document as the challenge’s details are refined as I settle into what works for me. This post describes what I see as the spirit of this engagement and I would hope any changes I make in the future are in service of this spirit first and foremost.