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 reflections about a post I wrote here. Furthermore, 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 developer 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 Proofs 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 RESTful 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 fascinating, I've done some research, I played with Haskell, I even wrote on my blog about what's functional 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 bug fixes 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).
  • Serverless: 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 daemons linked in serial with an Arduino from a Raspberry Pi). 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 language. 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 approaches and very alike. I don't master ALL frontend frameworks but I think I have 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 developers don't make an effort to adapt to these people, it is a living hell to go on the Internet for them! Too few developers 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 developer 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 craftsmanship: I am passionate about this topic. I am sure developers' job is a form of craftsmanship and as for every craft, 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 Craftsmanship 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!