Why cooking πŸ”ͺ makes you better at programming πŸ’»

I went to a cooking course and finished it as a better programmer. Check out what I learned…

To those who know me I am into cooking as well as I am into programming. It happened that it’s the latter which I do full time. But when I had got an opportunity to do a cooking course while traveling Vietnam I jumped right in. I learned there to cook 4 dishes, discovered how similar it is to coding and how to be a better programmer. Let’s start…

1. Pho 🍲 (enviroment)

Okay. The first dish we cook is the famous Vietnamese soup. The Pho. That thing is so well known it has it’s own emoji (what an odd metrics of popularity). You can say it’s ramen but for me, it was always pho. But before we cook anything we have to prepare. Our ingredients have to be ready, some of them in advance. Kitchenware should be nice and clean. And your chef’s knife has to be sharpened. In the professional kitchen, you don’t jump to cooking. It’s very crucial part of the process which we tend to skip as software engineers. I mean there are so many distractions around. Our workspace is not dedicated only to the programming work like the kitchen is to cooking. You have Facebook, Twitter, and Reddit at your fingertips. Your coworkers are asking about stuff and fusball of FIFA won’t play itself. Not mentioning the Slack. I am not trying to say that you shouldn’t use those things. We should look into our environment and make it more focused. Then we will work better and produce better software. Our job is difficult. It’s sometimes the art and the craft only we appreciate why we shouldn’t approach it like the world-class chef? To actually think before we do and prepare to what we have to do next in advance.

2. Lemongrass Chicken πŸ— (teamwork)

Lemongrass chicken is another analogy to the environment not to coding itself. Kitchen is a noisy. There are people shouting at each other, showing stuff, trying, experimenting. There are human relations and emotions in every dish and in every idea. When we sit at our desks with noise cancelling on we are blind to that. When our relationships are comments on pull requests or questions on Slack we are missing a lot. It’s no secret but there is a way to bring that noisy, passionate and creative environment to coding. It’s pair programming. In my career the best, most elegant and reliable solutions were created on such sessions. Let me tell you, pair programming is intense, but it’s the best. As chefs collaborate to create great dishes we should collaborate. Together we will awesome software and solutions we can be proud of forever. I know it’s hard with so much weight put on individual productivity. Clients might not see benefit because on the outside it looks like a waste. 2 engineers are working on one computer on one task. Simple math. 2 engineers * 1 task is 1 task done. 2 engineers * 2 tasks is 2 tasks done. But it’s wrong. Especially if your goal is to produce great, reliable (and braggable) code. If you never tried it I say you should give it a go. If you did, you know what I am talking about. Do it. Do more of it. My personal perfect coding environment would consist mainly of pair programming sessions. So, good code, huh? What’s in there for me? Well if you need another reason to do it here you are. That way your colleague transfers their knowledge directly to your brain. For free. I learned a lot of new shortcuts, tools, approaches and methods. The list is long.

3. Vietnamese prawn curry 🦐 (planning)

Marinaded shrimps are the main ingredient of the curry. You have to prepare marinade in advance and prawns need from 30 minutes to 2 hours to get the flavors. If you are cooking in a restaurant and the guest orders this dish it already has to be prepared. Nobody will wait 45 minutes for simple shrimp curry! And again, if you think about it the programming is very much alike. Like you would prepare marinade you should plan architecture of your app in advance. I am not suggesting it has to be bulletproof. But some kind of specification (even if it will change) is very helpful. Doing view by view in an agile way without thinking through the basics is like running naked in the jungle. Recipe not for the tasty dish but for disaster. It’s even exponentially severe when working in a team. And it doesn’t matter if you will use MVC, CLEAN, microservices or some new hip thing. What matters is preparation and consistency. Without a way you do things in your kitchen (I meant the team of course) any app will turn into a total mess. This is also true for solo programmers. Worst apps I ever wrote are those I wrote myself without any accountability. It was a blast at the beginning. I thought I am programming at FTL speed. But when the troubles came I had to refactor the whole thing to be manageable at all. Any momentum you will gain at the beginning shipping like that you will lose soon after. Again. I love delivering like crazy. I love to write a lot of code and features. Speed is important especially for our solo projects and startups. Yet coding carelessly can undermine it in a long run.

4. Hoi An Banana 🍌 (experiment)

We are already at the dessert. By the time I was preparing and eating it I was already full. There are two things I learned to make this dish better and countless which I am not aware of. You can either put it in a freezer for an hour, add some vanilla ice cream or both. The things I don’t know about I have to discover on my own. I wrote about planning and environment. It might sound rigid. The chef’s kitchens are very rigorous places. But they encourage experimentation. Such creations might not make their way to the client’s table. Yet they are very important for an individual cook and whole restaurant. Same for us. You have to always keep learning and experiment. Learn a new language like an Italian chef learns Asian cuisine to enrich their work. Learn design patterns of other communities to be a valuable member of yours. Do things the other way even if you know it might not be accepted. It might not be in style of current project but it could be the inspiration for the next. Check out advancements in AI or neural networks. If you are a mobile developer try to write a backend. Try out things which sounds inspiring to you. For a software engineer self-development is crucial. Technologies change and new frameworks are everywhere. New device announced could kill a whole technology branch. It might be the one you are working on. We can not stand still and watch a world changes around us. We have to be at the forefront. Companies need such people. Those who will push them forward, make their apps scale and work. As you can see even cooking which is unrelated at first could be a great source of inspiration.

5. Chili paste 🌢️ (recipe)

One of the ingredients of all the dishes but the dessert was a chili paste. It was delicious. I could eat it with spoon. I begged our teacher for the recipe for the whole workshops (and I managed to get it finally). What my point is recipes are important. You can experiment but if you want to serve steak with whipped cream you must know how to make steak and how to make whipped cream. You innovate on some level. Of course, you can do a breakthrough on the whipped cream itself but you have to do it with some knowledge about it. All cooks gather recipes. Like the best scrambled eggs. That awesome sauce. The way of cooking juices steak. And then they innovate on top of it. Yes, sometimes changing what they know. Yet the solid base is crucial. Picasso too was master of classic painting. So my fellow programmer please gather your knowledge. Keep you GitHub and your notebooks full of ideas. Sketch architectures, save code snippets. Share everything with other programmers and learn from them. Contribute to open source. Go to the next level by having the solid base. Repositories for the whole project are in pretty good shape. Saving, sharing and collaborating the little recipes, snippets or gists is not. Do you google one thing over and over again? Do you have some great code in your team which you keep looking in some long forgotten repo? Do you only start a new project like every few months and forget some basics? Me too. That’s why I started the personal crusade against it. If you want to help me test it out go to the bottom of the page.

I hope I inspired you to look at your work and improve at what you do. Maybe it sounds very far-fetched but it’s software engineers and researchers that will shape a world of tomorrow. It’s the startups we will create or help build that will change peoples life. That’s why I think we should always try to find a way to be sharp, efficient and creative. Let me end my post with a quote.

β€œThe best minds of my generation are thinking about how to make people click ads.”
– Jeff Hammerbacher, founder of Cloudera

This is the last thing. Don’t be like that. Don’t work at software McDonalds, be a Micheline star chef. Now go do something meaningful. You thought I will share recipes here? Nope, they are my own personal secret.

What inspires you? Share in the Comments πŸ‘‡


Footnotes:

  • I did a cooking course in Hot An, Vietnam at this school. They are the best. If you ever go there say hi to Vina.
  • I work on a code recipes repository focused on teams – Vsnipp. If you happen to take a peek remember feedback is love. Just write me an email (jeremi@vsnipp.com) or a message anywhere. If you have any idea that might be useful bring it on. If you register and try it out you are the best. I put prices there but those are only for a test and just give me a message if you want to try out premium account.
  1. The quote is not from Elon Musk. It’s belongs to Jeff Hammerbacher[1] (founder of Cloudera).
    Great blog! Continue working on it :).

    [1] https://www.fastcompany.com/3008436/why-data-god-jeffrey-hammerbacher-left-facebook-found-cloudera

    Liked by 1 person

    Reply

    1. Thanks, I will πŸ™‚ Actually I saw the article few days ago but I forgot I used the quote. You are right. I’ve seen this quote so many times attributed to Elon Musk though πŸ˜‰

      Like

      Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: