Throw out your tools - MPJ's Musings - FunFunFunction #54
Key Takeaways
Discusses minimalism in programming and cooking using fewer ingredients and tools
Full Transcript
good Monday morning I am mpj and you are watching fun fun function the clickbaity title of this today's video is throw out your tools I'm going to make a case for minimalism in this video last week uh I made a pair programming video uh together with my friend uh Eric we uh programmed a game using Unity since it's Unity we were programming in C in that video and uh in one one part of the video we uh uh we talk a little bit about how we neither of us use uh Getters or Setters when we uh programming in cop well we use gets and sets but we don't use the built-in language functionality for it we just use uh normal methods and one viewer Arion 5 uh asked why why don't you like Getters and Setters why why wouldn't you use properties they are great they obviously add value and this is super interesting because I totally agree that Getters and Setters add value it's just that I don't think they add enough value I like to use as few tools as possible and I think that to me for me adding one more tool to my tool chain uh I consider that to be a pretty high cost so that tool will need need to uh come with a pretty high value for me to like accept it into my tool chain and for me Getters and Setters like they to me they're just syntactic sugar they don't add that much value in this discussion I don't think there's a clear right or wrong several people in the discussion uh didn't agree with me uh they thought that adding uh one more property accessor uh was definitely that added value and that it was definitely worth it so I just want to make clear that there are varying opinions on this matter but I would like to make a case for mine today which is a kind of extreme minimalism I don't think that my opinion is the end all be all of of opinions on this matter but I do think that we as an industry could use a little bit more of this if you've been following this channel for a while you know about me that I uh I I don't use a lot of tooling many people ask me what editor I use and and so I eventually made a video about that called it was titled what editor do you use you can find it in the episode description and the tldr is basically that I use atom without any plugins at all I do this because I'm a kind of recovering tooling alcoholic I just can't handle the distraction of a complicated tool if you want to know more about that you can find the video in the episode description but in this video I'm going to make a case for Less l less libraries less language features and features in general really less plugins less build tools less less and less it goes without saying that I'm not referencing the CSS framework less which is ironically one more tool I did not start out thinking this way uh I'm going to tell you a story about me uh a very embarrassing story I used to be a person um I really liked stuff you know gadgets and uh cell phones and and uh computers and that kind of stuff I still do we all do but back then I really had this conviction that the person with the most stuff when they die wins and in my early 20s I ran a a company and uh when it comes to money uh I am a person that is very good at making money but but very bad at taking care of that money when it's there and when you're running a business you kind of have to be good at both of those things so in a couple of years I managed to tank this company completely and also uh am Mass a very sizable uh tax debt to boot this was definitely the economic uh low point of my life so the way things work if you have a tax debt that you cannot pay uh the uh Swedish the Swedish equivalent of the IRS will they can um get a seizure order for your things basically so I'm not sure what the organization is called in other other countries but in Sweden it's called Kun fugan and what they do is that if you can't pay your debts they have the legal right to come to you and seize your assets and sell them on your behalf to pay your debts for you so at this point I just figured that I would be proactive and sell my stuff first because I figured I would do a better job than them so what I did was that I basically sold everything I own that had any remotely any value so Xbox expensive computers whatever you name it got rid of so much stuff I basically liquidated everything I could into cash and just uh crem that uh towards the tax debt in practice the seizure order never happened I spent a couple of years working as a consultant and paying the tax debt off using just my salary but accidentally that uh liquidation of all of that stuff turned out to be one of the best things that have ever happened to me getting rid of all that stuff turned out to be a massive relief what I had not realized up until that that point in my life is that every thing you acquire uh be it digital or or physical for that matter carries a little tiny amount of work with it that you have to do if you buy a coffee grinder you now have a new routine in your life to buy beans for it when you upgraded from a dumb phone to a an iPhone you now have to uh remember to charge it every day and whenever you get any new thing and start reling on it uh that thing has a possibility of breaking down and then you now have a new task that means that you have to go and and get it repaired and none of these tasks are very big in themselves so it generally doesn't it's it's very invisible but once I got rid of all that stuff at one Fell Swoop it dawned on me how like big the am massed amount of work from all of those things that I have had uh how big that chunk of of time was how much how much of a drain on my resources that really was and that really changed my attitude on on these kinds of things I also want to talk about cooking uh let me uh I'm going to fetch a thing that I want to show you you can actually follow me around because I'm trying out uh having a levier like I'm going to open up my fridge and I'm going to pick out where is it where is it here it is I'm coming back wait for me wait for me wait for me this is this is going to be incredibly anticlimactic okay Tada fish sauce I'm going to talk about the fish sauce in a in a bit and I explain how that ties into this um but uh first I want to talk a little bit about cooking in General because I I love cooking um it's one of those uh one of the uh hobbies that I've picked up uh that are my non-programming hobbies it's and the like cooking is the antithesis antithesis anti antithesis of of um of programming because it's very concrete you start out uh doing something uh that is very tangible uh it's very limited in time and you end up with something real and then you eat it uh it's uh it's very different from programming which is uh abstract as hell uh and it can building a software can go on forever but there are still a lot of things that you can learn from cooking uh that are transferable into software development and one of those things is me and plus or just m it's French and it means everything in its place M basically means that you before you start cooking you locate all the ingredients and tools that uh you're going to need to make the recipe and you uh place them out in an orderly manner everything in its place I'll link to a video in the episode description if you want to check out um the concept of me plus by you know explained by somebody who actually knows what they're doing me plus is pretty convertible uh to programming in itself like just get all your uh stuff in order like your editor and uh all the documentation and stuff before you start programming it's very nice and very calming but a very nice bonus of M is that it gives you an overview of the complexity of the recipe if a recipe is very complicated just putting all the ingredients up is going to give you a sense that oh this recipe is going to be complicated this recipe has a lot of parts when a recipe has a lot of ingredients it's almost always going to add a lot of time to the recipe and it's also going to add more places where the recipe can go wrong because you make a mistake also it's not always the number of ingredients that is the problem it might also be things like this fish sauce fish sauce is super common in Thai recipes but not generally in the food that I cook I needed fish sauce in um uh to try a re recipe recently and I saw that I had it in my fridge uh but uh one of them had expired last year and another one had expired in 2013 so this is one of those ingredients that where you it's in a recipe you buy an entire bottle of it you use like this much and then you never use it again so I mostly like cooking simple recipes and by simple I mean recipes with uh uh few ingredients but not only few but also uh as generic uh as possible non non-specialized ingredients that I can use over and over again in many different courses but combined in different ways the advantage of this is that it becomes uh less costly because you don't it's it's just less food waste which in turn of course allows you to buy more high quality ingredients with the same amount of money and when you have fewer ingredients that means that you generally have less steps which means that you can spend more Care on every step so you improve your cooking that way too Italian cooking is a lot like that it it's a very few ingredients in very nonwear combination and it's heavily focused on good produce and and good quality meat as a as a basis for the cooking rather than interesting taste combinations that's a lot of talking about me and cooking and how but how does this uh fall back into programming well one of the main jobs of a programmer is to manage complexity building software means that uh you build new features over time things get added and added and added and the complexity just basically just grows and it's up to you as a programmer to keep uh this complexity Beast uh going for as long as possible basically and the way we do this is to find ways to make it possible to reason about our code in in a somewhat sane manner this is not my opinion this is actually uh important uh for reals uh in order to build software uh because when it comes to complexity um like we all have as as human beings and programmers we all have different a different level of capability when it comes to handling complexity uh some programmers uh can't really keep much of it in their heads at the same time and require quite a bit of Simplicity and some programmers are uh very good and can like keep like five or or or perhaps 10 things uh in their mind at this at the same time so they they handle complexity better but it's kind of like juggling there's a there is a person like most people can juggle two balls easily uh and some some people can uh that are professional jugglers and have done it for many many years can they can do like 10 bows but nobody can do a 100 bows therefore it's absolutely crucial that everybody knows how to build systems that makes it a lot easier to reason about our code we can't solve it by just hiring smarter programmers if you like thinking more about that there is this amazing talk by a guy called Rich hickey that I've talked about before called Simple made easy it's definitely one of the top five best talks ever on computer science and programming I've link to it in the episode description there are many ways to make it easier to reason about your code it's you divide and conquer is one of the more common ones breaking things into modules and just making sure that you can so that you can think about one problem at a time but another way uh that I think is heavily underrated is one that making a case for today which is basically throwing out tools use fewer language features use less libraries uh try to find ways of accomplishing the same thing but with less moving Parts involved a lot of people misunderstand me when I talk about this uh so I want to talk about trashing versus sacrifice so a lot of people think that uh oh okay yeah we should really clean up all the dead code in our projects and but that's not what I'm talking about like that's that's thrashing if I find you know like just trash on my floor and I throw that away in into the bin then I'm not simplifying my life in any way I'm just cleaning it's just thrashing sacrifice on the other hand that means actually throwing out things that have value that you like a lot that that that pains you to remove and that will piss people off if you remove them it means stuff like selling your TV because you don't want to spend more time watching TV in your life because you find that that has become a waste for you so when I'm talking about throwing uh out your tools I'm not talking about throwing just trashing things that you don't use I'm talking about actual sacrifice I'm talking about removing things that you actually find valuable but that you are willing to sacrifice in order to create a simpler cohesive hole I am going to give you a great example of this being done in the wild and it's it was just recently by uh create react app if you don't know what create react app is it's uh a uh boilerplate app basically an app skeleton that allows you to get going with react really really quickly without any fuzz create react app is zero configuration uh it gets you going right away uh it's well tested on many platforms and if something breaks down uh the configuration is the same for everyone else so you're very likely to get help on the Internet it's is great but in order to get there they had to sacrifice and one of the most controversial things that they sacrificed was Source Maps now Source Maps uh when they work they are amazing you have your original JavaScript code written in ESX or coffeescript or typescript or whatever H it's transpired down to ecmascript five running a browser and there's some error but you even though that code is transpiled you will get the correct uh uh U stack trace on the correct lines correspond in to your original code like magic that's Source Maps they are so good but create react app does not have Source Maps because Source Maps do not work all that well they break down a lot there's a lot of they did not feel like if we want to create this uh this cohesive experience that gives people a predictable outof the Box experience expence that you know just works and lets the people start getting work done uh Source Maps does not fit into that cohesive picture I really love Source Maps but I I really respect create react app for making this decision uh because they and they are able to do that because they know exactly what they are building so they are able to do this this sacrifice another problem with having many ingredients in your software is that more moving parts means that there are more parts that can break and therefore more things will break another hidden cost with using third party tools is that you need to stay up to dat new versions of these components are released all the time and uh you could elect not to do the updates but then you are partly exposing yourself to any uh vulnerability that is known and out there uh or uh your your documentation will simply go stale because uh the documentation online will be for the new the new version of the software while you're on the old one so it will be even harder to manage if you have many moving parts and many tools and stuff in your project uh it's going to affect how accessible your project is to pick up for other programmers might necessarily not make it worse might be actually make it better if it's a very well-known component that you're using but often it affects it negatively for instance Redux Redux is an amazing pattern but uh let's be honest when you start learning Redux it's like this um Rabbit Hole of of of things that you have to learn the documentation is like okay uh we are now going to teach you what action creators are uh and we go the documentation here we're using this thing which is a new thing it's a simple plugin that you can just pull from here you can read about it here and then you start reading about that thing and then you realize that that thing uses another thing that's it's just H it takes a lot of time it's far from straightforward to learn even especially if you use meta Frameworks like Redux Saga and stuff it really impacts the way uh your application will be received by a new programmer coming into the project especially if that programmer is not a JavaScript developer so if we're going back to the original thing the uh property accessors in C it could be argued that uh using C uh accessors is idiomatic to C like it's um what that means is that it's the way you do things in C it's a natural way of doing things and that is true so maybe if you're doing C while When in Rome you should code C the way rumans do and the same could go for Redux it's it's functional it takes JavaScript in a nice Direction it's definitely ideoma but it definitely does make it harder for a programmer not familiar with that language or that platform to move into it so we're using tooling that is very specialized for this language this this domain so to speak instead of using tools that have a tendency to overlap with other parts of the industry I'm not saying that we shouldn't be idiomatic it's it's nice in many ways but I think that we ALS we at least we need to be aware that there is a backside to idiomatic and these things they they kind of feed on themselves because if you are very familiar with a with a platform uh your the the amount of of cognitive L load that you can handle as a JavaScript developer you just ah I can handle these functional things I can handle like another Redux plugin sure I can throw that on I JavaScript is all I do so huh I I can do this all day but if you want uh developers to be able to move between different platforms and do a lot of things like iOS development or Android or and perhaps backend development and and frontend development in JavaScript like if you want developers to be able to help out uh in many parts of the organization then it's a very bad thing if people uh start using a lot of specialized tooling for their part of the tool chain that only they know about because it creates these Tech apar tiddes between us and people will start to create tools like human human human like I understand that people use human I really do and I understand that a lot of people spend time making human but I just hate human I really do I find it insane like the person that created human like I can't fathom that thinking process so they have so many tools they have so much so a setup for their project that is so complex that they had to create a meta tool to manage their overly complicated dual set it's like a person that has 2,000 shoes at home it does not occur to this person that they might have a problem collecting shoes no no they decide to build a shoe sorting robot I think this is crazy it's a personal opinion don't kill me too much I've been renting a lot I I'm not saying that you shouldn't use tools of course we need to use tools it would be insane I mean you can't make uh food with just flour it's just oh can but it's not very good we need some balance but I think that it's fair to say that you should ask yourself twice before adding a tool or ingredient to your um your software development process or your project next time you're about to add a new library or start using a new feature in your project a language feature that was not previously used uh ask yourself does this add a lot of value to my project that is because if you get into the habit of adding things just because they have some value you're going to end up with a lot of complexity over time but that is just me what do you think did this video make you think of an ingredient in your software development process that you could live without or maybe one that you couldn't live without or maybe you think I'm just full of please leave a comment down below you have asked watched an episode of fun fun function I release these every Monday morning 0800 GMT do not miss out on the next one I am mpj until next Monday morning stay curious
Original Description
💖 Support the show by becoming a Patreon
https://www.patreon.com/funfunfunction
We explore the idea of programming (and cooking) using less ingredients. Next time you are thinking about adding a new library, or using a new language feature, or adding an extra build step, stop yourself and ask for a second - will this actually add a LOT of value? Because if have a habit adding things because they add SOME value, you will end up with a lot of complexity.
⏯ Highlights
03:19 Embarrassing story
07:13 Cooking
11:55 Minimalism in programming
12:08 Manage complexity
14:48 Thrashing vs Sacrifice
18:38 Staying up to date
19:11 Accessible to other programmers
22:42 Yeoman rant
23:47 Summary
🔗 mpj on Twitter: https://twitter.com/mpjme
📺 Pair programming video from last week: https://youtu.be/VVJ0Gv9GJNE
📺 What editor do you use: https://www.youtube.com/watch?v=dIjKJjzRX_E
📺 Mise en place (Meez): https://www.youtube.com/watch?v=6YBmc4A0jok
📺 Simple made easy talk: https://www.youtube.com/watch?v=rI8tNMsozo0
🔗 create-react-app: https://github.com/facebookincubator/create-react-app
📺 Music in the video: Peacock by 7 minutes dead
http://bit.ly/fff-67-music
Watch on YouTube ↗
(saves to browser)
Sign in to unlock AI tutor explanation · ⚡30
Playlist
Uploads from Fun Fun Function · Fun Fun Function · 58 of 60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
▶
59
60
Higher-order functions - Part 1 of Functional Programming in JavaScript
Fun Fun Function
Map - Part 2 of Functional Programming in JavaScript
Fun Fun Function
Reduce basics - Part 3 of Functional Programming in JavaScript
Fun Fun Function
Destructuring: What, Why and How - Part 1 of ES6 JavaScript Features
Fun Fun Function
Reduce Advanced - Part 4 of Functional Programming in JavaScript
Fun Fun Function
Closures - Part 5 of Functional Programming in JavaScript
Fun Fun Function
Too many tools and frameworks!
Fun Fun Function
Currying - Part 6 of Functional Programming in JavaScript
Fun Fun Function
Recursion - Part 7 of Functional Programming in JavaScript
Fun Fun Function
Promises - Part 8 of Functional Programming in JavaScript
Fun Fun Function
Staying relevant as a programmer
Fun Fun Function
Factory Functions in JavaScript
Fun Fun Function
Composition over Inheritance
Fun Fun Function
Software needs to be better - FunFunFunction #1
Fun Fun Function
Unit testing: How to get your team started - FunFunFunction #2
Fun Fun Function
Straight-line code over functions - FunFunFunction #3
Fun Fun Function
Clojure - FunFunFunction #5
Fun Fun Function
The growth stages of a programmer - FunFunFunction #6
Fun Fun Function
5 tips to quickly understand a new code base - FunFunFunction #7
Fun Fun Function
Semicolons cannot save you! - FunFunFunction #9
Fun Fun Function
Functors - FunFunFunction #10
Fun Fun Function
Functors: I was WRONG! - FunFunFunction #11
Fun Fun Function
Questions and Answers - FunFunFunction #12
Fun Fun Function
Streams - FunFunFunction #13
Fun Fun Function
Prototypes in JavaScript - FunFunFunction #16
Fun Fun Function
Fast or Flexible? - FunFunFunction #17
Fun Fun Function
Coders are herd animals - FunFunFunction #18
Fun Fun Function
Weekend Kubernetes Shenanigans - FunFunFunction #19
Fun Fun Function
Monad - FunFunFunction #21
Fun Fun Function
Moar Weekend Shenanigans - FunFunFunction #23
Fun Fun Function
Questions and Answers - FunFunFunction #24
Fun Fun Function
Losing motivation - FunFunFunction #25
Fun Fun Function
LONGEST KUBERNETES SHENANIGANS! - FunFunFunction #26
Fun Fun Function
Fast code is NOT important - FunFunFunction #27
Fun Fun Function
Pair Programming a Facebook Messenger Bot - FunFunFunction #28
Fun Fun Function
Writing unit tests for personal projects? - FunFunFunction #29
Fun Fun Function
Let's Code a Pomodoro Button - FunFunFunction #30
Fun Fun Function
What editor do you use? - FunFunFunction #31
Fun Fun Function
Arrow functions in JavaScript - What, Why and How - FunFunFunction #32
Fun Fun Function
Is Programming Art? - MPJ's Musings - FunFunFunction #33
Fun Fun Function
Generators in JavaScript - What, Why and How - FunFunFunction #34
Fun Fun Function
Haskell Basics - FunFunFunction #35
Fun Fun Function
Haskell - Baby's first functions - FunFunFunction #36
Fun Fun Function
Is Big O relevant to you? - Q&A Part 1 - FunFunFunction #37
Fun Fun Function
How much are you allowed to Google? - Q&A Part 2 - FunFunFunction #38
Fun Fun Function
Haskell lists - FunFunFunction #39
Fun Fun Function
var, let and const - What, why and how - ES6 JavaScript Features
Fun Fun Function
Why are some programming languages popular? - MPJ's Musings - FunFunFunction #41
Fun Fun Function
Does a developer need to be nice? - MPJ's Musings - FunFunFunction #42
Fun Fun Function
bind and this - Object Creation in JavaScript P1 - FunFunFunction #43
Fun Fun Function
Examples of this and bind - Object Creation in JavaScript P2 - FunFunFunction #44
Fun Fun Function
Prototype basics - Object Creation in JavaScript P3 - FunFunFunction #46
Fun Fun Function
Separation of concerns RANT - MPJ's Musings - FunFunFunction #47
Fun Fun Function
Cellular Automata - Pair Programming - FunFunFunction #49
Fun Fun Function
The 'new' keyword - Object Creation in JavaScript P4 - FunFunFunction #50
Fun Fun Function
__proto__ vs prototype - Object Creation in JavaScript P5 - FunFunFunction #52
Fun Fun Function
Unity game pair programming - Let's code - FunFunFunction #53
Fun Fun Function
Throw out your tools - MPJ's Musings - FunFunFunction #54
Fun Fun Function
Unit tests vs. Integration tests - MPJ's Musings - FunFunFunction #55
Fun Fun Function
Object.create - Object Creation in JavaScript P6 - FunFunFunction #57
Fun Fun Function
More on: AI Pair Programming
View skill →Related Reads
📰
📰
📰
📰
AI Is Forcing Us to Rethink the Economic Operating System
Hackernoon
I'm building a software company alone. No support. No mentor. No family backing. Here's what that actually feels like.
Dev.to · Akhouri Anmol Kumar
The Second Half Starts Now: A Practical Reset for Small Business Owners in July 2026
Medium · Startup
Influence Is Collected, Not Given
Medium · Startup
Chapters (9)
3:19
Embarrassing story
7:13
Cooking
11:55
Minimalism in programming
12:08
Manage complexity
14:48
Thrashing vs Sacrifice
18:38
Staying up to date
19:11
Accessible to other programmers
22:42
Yeoman rant
23:47
Summary
🎓
Tutor Explanation
DeepCamp AI