DEV Community

Cover image for The Definitive List of Things I Don't Know
Niko Heikkilä
Niko Heikkilä

Posted on • Originally published at nikoheikkila.fi

The Definitive List of Things I Don't Know

Lately, I've been pondering about my work and where I want to head with it. Thus, it's only logical to understand what I need to learn to get there. Turns out, the more I think of things I don't know the more assured I grow about the importance of admitting those instead of hiding them.

A large part of the tech industry suffers from a misconception of needing to be a supreme developer who knows everything and can't burn out. For years, we've seen job ads ridiculously detached from the real world. These ads require candidates to have more than 5 years of expertise with more than 10 different techniques.

Product and business owners demand more throughput with fewer resources. Recruiters fail to hire the right people when they don't interview the existing developers about the skills needed in their daily work. Venture capitalists build and live in their own imaginary worlds filled with engineers that can mine raw diamonds every day while working 60-80 hours a week.

Us developers are not innocent either. Without a hint of criticism, we tend to share these massive learning roadmaps about skills we need to master before being entitled to some rank.

Don't even ask where all the impostor syndromes are coming from.

Meanwhile, we should be supporting demographical minorities to start their careers in tech. For some of the major tech companies, it's enough to change your profile pictures on social media to include a cool rainbow and everything is given. You are welcome to be a member of our toxic work culture as long as you fill this list of 20 unrealistic conditions imposed on you.

We have a serious problem and we as professionals are responsible for fixing it by admitting the world that you don't need to know everything.

This post was sparked into life by a similar list from Dan Abramov and the far-spread dumpster fire on Twitter about so-called "10x engineers".

Of course, the aim of this post is not to give a bad picture of myself. You can find out plenty of the things I'm good at by following my blog and social media accounts or just talking to me. Nevertheless, let's keep it out of the scope of this post.

Without further introduction here we go. I will likely revise this list at a later date.

The Definitive List of Things I Don't Know (2019)

  • Remembering programming language syntax, algorithms, module usage, and many other things without looking up Internet cheat sheets. Do you think I'm a supercomputer with infinite storage and processing capacity?
  • Remembering what I worked on more than a week ago which is especially troublesome when the code you wrote is pushed to production three weeks later for you to support. Did I really write this? Oh, according to version control I did. Well, let's see…
  • Avoiding bugs. We all create them, no need to stress about it. At least I can squash the defects I've given birth to.
  • Naming variables, functions, classes, and other concrete parts of the application. Often I can give them their proper and final names only after seeing how the application as a whole works best. Until that point, enjoy reading my generic signatures such as def get_item_from_store(n: str) -> Item.
  • Updating documentation as I code. The software documentation by definition is always outdated, anyway, so this is not a big issue.
  • Doing Test-Driven Development (TDD). On many occasions, I have to play around with my vision and write some boilerplate code before being able to figure out what kind of tests I need. Many of the assumptions with TDD indicate you instantly know all the test cases just by looking at the acceptance criteria which is very dangerous. Wrong or badly implemented tests are always worse than no tests at all.
  • Writing code using an incredible repertoire of Vim macros and achieving a glorious 100 lines of code per second typing speed. I've configured my editor with the most important shortcuts but I still need to reach for the mouse to move a cursor to its right place from time to time.
  • Estimating the time required for a feature to be completed. 1-2 weeks at most with the current velocity if there are no surprises with 3rd party dependencies is my standard guess. Wait a second and I'll roll you some story points with my mental D&D dice set. Bring your best deck to the meeting.
  • Creating beautiful UIs. I can center a couple of elements with CSS using margin rules and pick a satisfying font pair from Google Fonts. Anything beyond that like complex frontend frameworks, grid systems, and flexboxes beat me. I'm slowly getting to cope with React, though.
  • Writing low-level code. Especially when it's targeted for embedded systems. I took a couple of C/C++ courses during my studies but I've happily forgotten most of it after steering my career path to web development. Sure, I can create a fancy marquee text on a LED display by programming I/O signals but I'll probably forget to free all the memory and your device will just crash or set ablaze.
  • Mobile platforms. I once tried to create something on Android but noticed that I don't know the dark magic of Java IDEs and gave up. I've heard you can replace Java with some other language now but I still would write a PWA with web technologies instead.
  • Game development. I've studied game design and written about games but I don't know how to actually develop them. The most advanced thing I've accomplished is a Pong (1972) clone following a tutorial.
  • Graphical design. I've learned some design tools (Sketch, Lunacy, Invision) while searching a way to quickly do cover images for this blog. So I know how to place shadowed text on a background with some additional clipart. Don't hire me to do advertising material for your next campaign, though.
  • Being an IT support. The messy world of drivers, peripherals, consumer operating systems, and different network stacks is so large that I'm constantly being overwhelmed. If you call me to fix your printer or home router, I can only ask you to turn it off and on again. By chance I might establish a remote desktop connection to reinstall whatever drivers are available.
  • Hardware. Related to the above, the most advanced thing I've done to my PC is to switch new HDD and SSD drives inside it which took a couple of hours wrenching and swearing. My next computer is definitely a laptop.
  • …and many more things I haven't yet thought about.

None of us engineers are "supreme developers", "rockstar coders", or "agile ninjas". Not even in the wildest dreams of these half-witted VCs. If your HR department thinks that it's an essential part of the job to survive without looking things up on the Internet, kindly pass my name from the list of heads to hunt, please. I'm not good at all the things and it's fine.

But the one thing I'm exceptionally good at? Admitting when I don't know something and asking for help. I hope you are like me.

Top comments (20)

Collapse
 
evanoman profile image
Evan Oman

Thank you for the post!

While you covered this with your last bullet point, I think one of the biggest hurdles for any type of progress is that most of the things you don't know, you don't know that you don't know. Just like the old Rumsfeld quote, the unknown unknowns are the hardest to address. I see this every time I try something knew, it opens a cascade of new topics and issues that I had never even considered.

Collapse
 
nikoheikkila profile image
Niko Heikkilä

True. While realizing the limits of one's knowledge one must not resort to negative outcomes such as impostor syndrome or Dunning-Kruger effect but embrace the possibility of expanding the knowledge. There's a lot to learn for all of us here.

Collapse
 
rockykev profile image
Rocky Kev

This really hit close to home for me. Thank you. I was looking back at my experience over the years, and I chatted with this group of devs who were all familiar with Vue, Gatsby, GraphQL, etc. Made me feel insecure. (But then excited about what I don't know!)

  • Remembering what I worked on more than a week ago
    My old boss reached out to me, asking for FREE work on a project I did a month ago. I told them it will take me 10 hours of paid work just to remember what I was doing. They got really upset.

  • Being an IT support.
    I get dizzy talking to the IT guys when they geek out about servers.

  • Hardware.
    My coworkers keep coming up to me, asking me to recommend a laptop to buy. My answer -- a Chromebook. Because all I do is see them on Youtube anyways.

Collapse
 
nikoheikkila profile image
Niko Heikkilä

Well, had I included all the Javascript frameworks I don't know here this list would have grown to have hundreds or maybe thousands of entries.

My old boss reached out to me, asking for FREE work on a project I did a month ago. I told them it will take me 10 hours of paid work just to remember what I was doing. They got really upset.

Wow... I would have hung up the call right after them stating the work should be done without any compensation.

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀 • Edited

I know all about nuclear fusion 💥.. And that's why it's good to be honest.

Okay on to seriousness, there is nothing on this list that is concerning. Some of it you will never improve on because nobody does, some of it is not so important. I'd say your right on track!

Collapse
 
charlesdlandau profile image
Charles Landau

So much of my anxiety is summed up in these four bullets

  • Avoiding bugs. We all create them...
  • Naming variables, functions, classes, and other concrete parts of the application...
  • Updating documentation as I code. The software documentation by definition is always outdated, anyway...
  • Doing Test-Driven Development (TDD). On many occasions, I have to play around with my vision and write some boilerplate code before being able to figure out what kind of tests I need...

Reading you name them and own them makes me re-evaluate how I guilt myself about this stuff.

Collapse
 
nikoheikkila profile image
Niko Heikkilä • Edited

Admitting one's lack of knowledge is a step towards right direction. However, it must be complemented with desire to pursue new knowledge to fill the gaps.

...and sometimes even that is not enough to achieve the goals. Keep calm and carry on, though!

Collapse
 
aminalali8 profile image
Amin Al-Ali Al-Darwish

Thanks for the post
...
But ...
...
Only if the targeted people would read this...

Collapse
 
nikoheikkila profile image
Niko Heikkilä • Edited

Do share this post to relevant people then. 🔥

Collapse
 
aminalali8 profile image
Amin Al-Ali Al-Darwish • Edited

If only it wouldn't be considered such an offense where I live...
But I guess we have to, at the expense of a client or two...

Thread Thread
 
nikoheikkila profile image
Niko Heikkilä

Ah yes, not all the regions share the same level of free speech as I do. I believe that in countries endorsing a culture of hard work over anything else you would get a bad reputation from criticizing your business' management - even from inside the company.

In my country, you can criticize freely but it's often discouraged by peers who feel uncomfortable when even thinking of strikes. For better or worse, we are a very loyal nation towards our employers.

Collapse
 
dhkamp profile image
David Hölkeskamp

Very mindful, and well written post.

I think it is really important facing the thought that you can not do everything and are not good at everything - and it's totally fine!

Collapse
 
djpandab profile image
Stephen Smith

Yes this was great read! I have so many of the same thoughts. Very few have photographic memories, so why act like we all do. Use resources - ask questions. I found this post refreshing.

Collapse
 
lpozo profile image
Leodanis Pozo Ramos

Great post!

Collapse
 
tetteis profile image
Tettei Shahday-Annang

Your post has greatly relieved me. Thanks so much for this Niko... 💙