Weeknote #1
Last modified:
A pizza night
I make a bunch of pizza dough. I bring my Ooni to a friend's house. Everyone hangs out and eats pizza. It's pretty great. And this time I had help making the dough and forming it, so it was way easier.
A cold
School started the week prior, and my daughter got a little cold. It didn't seem to phase her. She bounced back in like a day. I'm assuming I got it from her. It knocked me out for 1.5 days, and I'm still coughing up a lung. I'd consider myself a very healthy person, and I rarely get sick. But when I do, it really throws me off.
Functional Core, Imperative Shell
I decided to revisit a couple of my favorite talks by Gary Bernhardt.
I feel like I pickup something new, or am reminded of a good habit I've strayed away from, every time I rewatch them. On this instance, I came to the conclusion that I'm not pushing the idea of values as boundaries far enough (as evidenced by this post).Scott Wlaschin's talk on moving IO to the edges captures what I'm referring to very well. It also makes a pretty convincing case that interfaces often aren't worth it. If you push IO (i.e. side-effects) to the edges of your application, and use values as the boundary between your core and shell, it's often easier to just compose a new shell rather than define an interface so you can easily swap them at start up.
I concluded this rabbit hole by watching Rich Hickey's talk Simple Made Easy. While tangentially related to FC/IS, it makes the case that "simple" and "easy" are very different things.
Simple means "not intertwined".
Easy means "at hand".
In order to create simple software, you should strive to use simple constructs (think functions and immutable data vs. classes and methods) and keep things conceptually simple by thinking of the specific problems you're trying to solve. This will often result in more things (functions, variables, data types), which may not be "easier" to manage, but makes your solutions more maintainable.
I'll likely want to revisit this one.