Written by Nathanaël Cherrier

What do I know and don't? (2019)

I really like talking about programming with people in conference, on Twitter, Instagram, via email, and more recently on my brand new MindsersIT community forum. I also appreciate when people (developers generally) share their ideas and reflexions about a post I wrote here. I noticed that people often think I know it all, as they'd forget nobody knows it all.

This post is inspired by Dan Abramov's post on his personal blog "Overreacted". If you don't know who this mal is, he is one of the main developper of the React library at Facebook. He came to the same conclusion as mine and decided to write a post where he encourages people to do the same. So here is mine.  

Still, even experienced engineers have many knowledge gaps. This post is about mine, and I encourage those who can afford similar vulnerability to share their own.

Because I want to be honest and transparent, I was planning on publishing my usual (and boring) best posts list from last year. Of course, I got lazy and we are already mid 2019. So I will be doing a "what I know and don't" instead, I mean, that's not a big deal, isn't it?


What I don't know

Let's start with things I unfortunately don't know. "Unfortunately" because those are things I really wish I'd knew more about.

  • Electron: I've been really interested in this project when it came out, I even tested a few Proof of Concept but I never went really much further. I have a global idea of what I could do with it though.
  • CSS methodologies: I know CSS, I use it on a daily basis and I am pretty happy with it. However, I voluntarily put aside methodologies such as BEM in my learning path. I get how useful they are but I wouldn't be able to use it properly.
  • WebGL: I never worked with WebGL. I saw beautiful snippets on CodePen and that's about everything I know about it.
  • GraphQL: I've had my eyes on this technology for a while now but I've been lacking time so I learned RESTfull instead because it is more used. I only developed one website using GraphQL. This year I'm committing to it.
  • Functional languages: This one is hard to write because I really wish I would know more about it. The topic is really interesting, I've done some research, I played with haskell, I even wrote on my blog about what's functionnal in JavaScript but that's about it. I don't master any purely functional languages.
  • Android development: I learned Android development when I was still going to school. Ages ago in the dev world. I also wrote some quick bugfixes when I was working at a software firm. I forgot about everything I knew and the knowledge I still have today is probably deprecated now.
  • Shell script: I've written a lot of scripts since I've been coding! Unfortunately, I can't say I master this powerful language. I noticed I always use the same language structures, I don't have a clear vision of what we can do with shell scripts (not even talking about differences between interpreters).
  • Severless: Of all the technologies listed there, this might be the one I know less about. I understand that its goal is to erase the server management for the developer but to me, that sounds like magic right now.
  • Python: This language looks quite interesting. I coded a few small Python programs (for example: 2 UNIX deamons linked in serial with an Arduino from a RaspberryPi). However, that's how far my knowledge goes. I don't master it at all, I might get to it one day.
  • System and network administration: You might think this is normal because I am NOT a system and network admin. You might be right but it could be so helpful to me today. I manage my own servers and those of my clients but I stick to basic tasks.
  • Streams: That's a big topic. Streams have been existing forever, in (almost) every languages. I have no excuse, I just never took the time for that. I used streams, I know what it's used for, in which case you should use it but I don't know how it's working underneath. I have to take the time for that too.

What I do know

Now that you know all of that, I'd like to end this post on a positive note: what I do know. My ego needs it after that long (and non-exhaustive) list of things I'd like to know.

  • JavaScript: I will always have more to learn about it, I'm thinking about AST creation, streams...etc. But I think I acquired a good amount of knowledge and experience of Javascript.
  • Frontend frameworks:  I've been learning and working with Angular and React for years now. I read the Vue doc. Those frameworks are quite similar in their approches and very alike. I don't master ALL frontend frameworks but I think I have a good global knowledge thanks to the frameworks I use daily.
  • NodeJS & ExpressJS: I actually write a lot of NodeJS code (personal frameworks, command line interface, etc) than I do with ExpressJS (web app). But that is the only backend JS framework I've learned since I use NodeJS. I'd say I know it pretty well. I did the test of coding a NodeJS framework all by myself, it is inspired of what I know of frontend, ExpressJS and backend in general. I think it has been useful to understand better how things work under the hood.
  • Accessibility: A very important topic. I got really aware of that when I had to re-do SNCF's website that is dedicated to disabled people. When developpers don't make an effort to adapt to these people, it is a living hell to go on the Internet for them! Too few developpers are sensitive to that topic and it is a shame. Beyond the knowledge question, it is an inclusion matter.
  • TypeScript: My first approach of TypeScript has been, as for many people, via Angular 2. I found it interesting and powerful enough for most of my own projects to be based on that!
  • Swift: I am an iOS developper and I still remember the day Apple announced Swift. Since then I've had the chance to start all of my projects with Swift despite some client's hesitancy. I think I still have some weakness in server development with Swift.
  • Software craftmanship: I am passionate about this topic. I am sure developers' job is a form of craftmanship and as for every crafts, you can get better up to the point of mastering your craft, being an expert. I read, wrote and shared a lot about it.
  • Clean code & architecture: For me, a good dev doesn't only write code for it to work but he also guarantees to his client that the code will last as long as possible, that it will be maintenable...etc. Clean code and clean architecture are part of the Software Craftmanship movement, so I'm all into it.
  • OAuth 2.0: I've been stuck with this topic for a while. It is a standard/protocol that I find difficult from a dev's point of view but it simplifies the life of users so much! I learned to implement a OAuth 2.0 server from scratch and I studied specialized solutions such as oryd/hydra. It was awful but I got through it. I think that now I know. On the "security" side, it is stressful despite my knowledge on the topic.
  • i18n : Internationalization is a topic that resurface with almost every website I develop. But each and every time I start a new project, I ask myself if there is not a better tool to use. It might be the only topic that despite a strong and ever growing knowledge, I have no opinion about. I used, experimented, saw a lot of different tools throughout projects and I understand how they work.

Those lists aren't exhaustive and I have still a lot to figure out. Computer science and programming are such wide topics!

The point of this post is to show to everyone but especially beginners that nobody knows it all. We all have things to learn and better.

Don't make the mistake to think that because people talk and share their knowledge on social media, website or blog, they know better than others. More important: don't depreciate yourself. You are a work in progress as we all are, whatever our positions or expertise levels are!

If your have any questions or advices, create a comment below! Also if you like this post, don't forget to share it to your friends. You can also support the blog on Patreon.