Similarity Between Chefs and Software Engineers
“Computers are to design as microwaves are to cooking” — Milton Glaser (American Graphic Designer)
I’ve always been a sucker for food. I love eating food and exploring new cuisines when I travel. I spent most of my money ordering food from home, rather than spending it on clothing, games, or anything. That’s why I put big respect for chefs. Those who prepared a delicious dish are almost God-like to me. Because of my piqued interest, I started to watch culinary videos on Youtube and shows on Netflix that are related to food. Some of the shows are The Chef Show, Street Food Asia, and even The Final Table.
After watching them over and over… I can’t help but notice several aspects that they have, which I think are really similar to what we also had in software engineering. So in this story, I would like to show you several things that I saw in the chef’s job that is also quite similar to the software engineer’s job.
1. Cooks vs Chef
Everybody can cook, but that doesn’t mean that they are chefs. I can cook instant noodles or toast bread, but that doesn’t make me a chef. Chefs are considered to be professional in terms of culinary knowledge and skills. There’s another term for people who can cook really well, and that is a cook. That’s why in Masterchef, they always refer to the contestants by calling ’em home cooks not home chefs. There is a fine line between “able to” and “mastered”.
Similar to software engineering…
Everybody can make a simple program. A simpleHello World
text, printed on the screen already considered a program. That doesn’t make you a software engineer. I prefer to call it a programmer, cause you simply make a program. For people who are professional in terms of software knowledge and skill, we called it a software engineer. Software engineers are not just making computer programs, but they also apply engineering principles to their programs. In fact, I once ranted about it here:
2. Open recipe
Chefs are very open about their recipes. They are willing to share their methodology for cooking a dish. Hell… there’s even a step-by-step guide provided by one of the most famous chefs in the world on how to make fried rice. You can find a bunch of other recipe-sharing videos on Youtube.
Similar to software engineering…
We have open-source software where its source code is open for everyone to see. You can even modify it or make another software on top of it. We’re willing to share our source code, our “recipe”. More surprisingly, we do it on purpose! I make a whole story about it in my other publication (in Bahasa Indonesia):
3. Deliverable Packages
When I was watching The Chef Show on Netflix, the chefs are talking about Beignet and how good the Beignet from Cafe Du Monde is.
Then the chefs cook with the special flour which they bought from there. It’s the flour for making Beignets that tasted exactly like it straight from the cafe itself. We often see this kind of product in other chains or restaurants, like for example a coffee sachet from Starbucks. Aside from the dish itself, people could also purchase the ingredients. With the ingredients, they can create their own custom dish with a guarantee that the base flavor would be the same as in the restaurant.
Similar to software engineering…
We also have this thing called a library. No… it’s not a building filled with books 📚. A library is a collection of resources that is made by a certain software engineer(s) and can be used in a software development process. This is our “flour”. When we are too lazy to create something from scratch, we just search for a good library out there. Library for user interface? We have Bootstrap. Library for date-related calculations? We have date-fns. And many more!
We just use the “ingredients” that are guaranteed will produce the correct output, just like the flour from Cafe Du Monde. Hell… it’s even called “package” in the software engineering world. Coincidence? 😜 I think not.
4. Critique Culture
Following up on point number two. Because of the practice of sharing recipes, chefs sometimes critique each other. “You can add more sugar to that sauce” or “You should try this ingredient next time”. This usually happens when a chef is invited to a kitchen. Then the kitchen owner will start to run through their recipe.
Similar to software engineering…
We also have this practice called pull request review where people could see what program we’ve been working on. Our code will be reviewed by peers to validate whether our piece code is already acceptable. It’s like giving people our “recipe” for them to review.
5. Kitchen
The kitchen is like a laboratory for chefs. They often do a “flavor experiment” there. They try out a new dish before they put it on the menu. All that happens in the kitchen. In the Chef movie, there is a depiction where a chef doesn’t go home and still working on his menu until the morning comes.
Similar to software engineering…
We have this thing called a sandbox. Sandbox is like a testing environment where programmers can do experimentation before they shipped their code to production. In this “kitchen”, we try out a new library, calculate the algorithm’s complexity, switch approaches, and so on and so on. We are testing out our “ingredients” before we deliver our final code to be shipped to the actual users.
6. Menu
One thing that exists in every restaurant is a menu. A menu in essence is a list of dishes that can be made by the chefs. We, as the customer, simply ask the waiter to bring us a certain dish written on the menu. We don’t know what’s going on in the kitchen. What we know is that the dish will come to the table exactly as the menu described. The menu is like a “communication device” between chefs and customers.
Similar to software engineering…
Many engineers have already discussed this, many analogies have been made — and that is an Application Programming Interface or API in short. API is a list of commands of how we can communicate to a certain service or library. We don’t care what’s going on in the background, we don’t care what’s going on in the “kitchen”. What we know is that if we do something based on the provided API, we will get the result as stated in the documentation. This is an example of an API for the react-native library.
7. Specialization
Many chefs also had their own expertise. There are pastry chefs who excel at baking pastries and making desserts. Meat chefs who responsible for processing the meats. Saucier is the chef who creates the sauce. Each of them had a different set of skills and functions differently.
Similar to software engineering…
Engineers also have their own specializations. The most common one is the differentiation of backend and frontend engineers. Backend engineers manage servers, databases, and business logic whereas frontend engineers make the app or web that the users gonna interact with. There are also game developers, the “artsiest” among engineers. Data engineers recently became popular because of the rising technology of artificial intelligence. And many more!
So what do you think? We’re pretty similar, right? 😀
We knew them as chefs, but they are actually food engineers.
Cheers 🍻 — Ferzos