This post was originally written on September 11th, 2018
Sometimes when my brain is fried from coding or writing, I like to zone out for a little and go for a walk. My usual route includes food trucks. I observed the hustle and bustle as I walked by, and somehow my brain just honed in on how the team operated.
I think I was able to obeserve what I saw because my mind wasn’t set on getting there, getting the food, and getting it in my stomach. Not having hunger on my mind allowed me to see something else. I went home and proceeded to look for compilations of street food vendors doing their thing.
The Epiphany and Similarities
Through my career, I’ve had to learn several different programming languages, and I’ve noticed that there’s always a particularly generic way of doing common things. Most languages will have a library/package to manipulate strings, apply non trivial math operations, check for errors, etc.
To minimize the amount of time I’ve spent learning, and in turn maximize my growth, I reach out to people who have already spent time getting across the obstacles in my path. I get feedback on my work and easily obtain knowledge that would have otherwise cost me precious time. I’m allowed to use the time to do more work.
For the main group of responsibilities that I have in producing code and maintaining infrastructure, I always try to understand what I’m doing. I do things the hard way until it’s in my head.
Because I took the time to understand things ‘the long way’ or ‘the hard way’ I gave myself the credibility that I can do it again if I need to. At that point, I start to do things the easy way.
I write functions and bash scripts that save me time and make me more effective. I share my tools and knowledge with my team so that I become a source of positive growth for them as well, which leads to a boost in overall productivity for the team, and I’m pretty sure street food vendors do all of the above.
We’re Badasses in the Same Way
No matter where in the world or what the cuisine involves: fruit, rice, smoothies, meat, or rice, the way these vendors flip, scoop, cut, churn, or chop conveys nothing less than a non trivial amount of experience.
Not only are they efficient in their movements and processes, but through the ability to utilize their tools and operate at such a high level for a prolonged period, they are proficient as well.
You should strive to code in the same way. Not only that, but actively promote this behavior to others in your squad.
I’m not saying that you should be typing super fast without hesitation and producing perfect code, but an emphasis on the above to the best of your abilities is key.
To get the job done and produce code, AKA make yummy food (both which lead to paying the bills), some things I’ve found helpful are to have:
- some familiarity with the standard library in order to shorten the time taken to do specific things (read/write to a file, round a number and operate math functions, etc.) a mental toolbox to tackle situations that may be common as you develop software (what data types to use, manipulating/iterating collections of data, checking for errors and writing good tests)
- a resource available for assistance, validation, and growth (discord or slack, reddit, stack overflow, etc)
- a means of articulating a process, feature, or content within the specification of a language or technology (knowing how to ask things like, ‘what is the library/package used to do X in the Y programming language, how do you write a test for A in order to make sure that the code you wrote not only works as intended, but is as ‘bulletproof’
- knowing your ‘tools’ like how the street vendors wield their knives, woks, and pans – understand your editor well and figure out how it can maximize your workflow (a lot of folks write blog posts on plugins and processes for pretty much any language you can think of)
- consistently looking to make contributions to promote growth to your team in the form of documentation, tricks, tips, anything.
- shedding the fear you may have of people thinking you’re incompetent and asking for help + asking stupid questions. I’ve found that the people who I can and should turn to for help are more than happy to. Most of my time being scared and quiet leads to adventures down the wrong rabbit holes and an overall inefficient use of my time.
Take the Time, Be Consistent, and Make Sure You’re Always Challenged
Note that what you see in the form of compilations of youtube videos of people moving with such robotic or superhuman motions has been learned through a deep investment of time and effort.
What you see here is a deep level of refinement – you don’t get to see the scars or broken fingers.
All of the points I mentioned above come with time and experience at various points: through hectic situations, on the job training, and messing around on your own time. You shouldn’t feel bad if you don’t have knowledge that fits those points exactly, but you SHOULD be working on it.
I have seen people do the same group of exercises over and over again… And over again. Always able to breeze through the specific exercise but unable to transfer the skills to situations outside of the exercises.
While repetition is key, understanding how to solve a problem in a slightly different scenario is very beneficial. Don’t do the same 12 exercises to manipulate strings in the exact same 12 ways multiple times.
To some degree, it becomes monotonous; just something that allows you to say, ‘okay, I spent 5 hours doing this thing for the 10th time in the exact same way, this counts as learning!’
The example I like to use involves basketball: you practice shooting free throws and three pointers in practice but can never land them during a game. When the pressure is on. When that shot really counts.
The biggest motivation for writing this article is for people who are doing coding challenges. As you go through them, you should be getting to know the ‘standard’ things like the libraries used and the language’s syntax. Make sure you are always challenged and find ways to utilize the experience of others and existing resources in such a way that can promote growth and minimize/streamline the time taken to learn. Become a positive force to others by sharing your own knowledge. No matter how little you may think you know, anything helps.
The point of the coding challenges is the same as the future badass street vendor cook who is just starting out. Learn the tools, be consistent in your training, and refine your processes to improve the quality and amount of output. Helping your team do the same can only lead to great things.