The teacher/student impostor syndrome in JavaScript

Aristos Markogiannakis
7 min readAug 4, 2019

Last year I was asked to do a talk at JavaScript International Conference in London. I thought that would be cool, but what should I present? For a number of years, I have been teaching at City University; back in 2013, I started to teach .NET, and 4 years after I took over the Advanced JavaScript course.

This was only a part-time job, but for me, it also offered a number of useful skills, it made me a better senior developer. Teaching is very powerful, and I only realised once I started teaching, through the teaching I have been able to understand a number of topics that I was not able to do whilst working but also it pushed me to learn a number of concepts well enough to explain to my students.

JavaScript is, at the moment, the most used language, with a high demand for developers, and it has advanced so quickly that it is hard for all of us to keep track of the changes.

Most of us in the field for years, or any newcomers, we all face the same imposter syndrome, which is a psychological pattern: we all face a situation where we doubt our knowledge, abilities, accomplishments, or have a persistent internalized fear of being exposed as a “fraud”. We do a lot of good stuff but we always feel like we are never doing enough.

We have all got to a point where we keep learning and we become better day by day and the more we learn the more we fear we still don’t know enough. As Laozi said the more you learn, the less you understand.

JavaScript as a language has gone through a lot of changes, coming from being a basic augmentation of frontend to becoming a solid full stack language with Node.js… It is now a language that can stand on its own and it looks like it is not a scripting language.

The idea of this talk came whilst I was teaching JavaScript, and for a number of times I tried to find what is relevant. What should a new developer know? Looking around the web I came across some tweets from Eric Elliot:

All Developers should know

All the above makes sense all developers should know what the language is capable of, understand the functional magic of the language and being able to write vanilla, idiomatic JavaScript.

But is this the case?

The case is that we seem to have forgotten that JavaScript is just a part of the triad of web development, along with HTML and CSS. Especially, learning HTML before you learn JavaScript it is very important. And it is also important that you understand what you are coding against, you are coding against the browser. When you are learning about global variables, let const and var. And not just the global variables, but also the host variables such as window, location, and others. All those living in the browser; the environment we are working against.

Another important thing to know is that, as a developer, you are expected to know how to read, comprehend, and debug other peoples’ code. Once you know the basic concepts you are expected to know how to analyze and evaluate the code someone else wrote. Only then you are able to create.

So many junior developers are treated unfairly at the moment, where they are pressured to work as senior developers, just with a junior salary. As a result of this, their confidence is going down, their abilities challenged rather than supported, and their impostor syndrome aggravated with the increased uncertainty.

The language, in my opinion, has taken some wrong paths, and a number of expectations have been made about every developer, that made development more complicated than it should or needs to be.

Expectation Level 1 — Everyone needs to know a framework

Instead of focusing on the language we all have gone into wars about the right framework, ‘I like Angular’, ‘I prefer React’ and others go with VueJS. We went with opinionated comparisons and everyone has just gone and learned their favorite or their peer’s favourite. People jumped in learning the framework, all the while forgot to learn the language.

Expectation Level 2 — Everyone needs to know how to test their code

Oh yes, that’s true, you need to know how to test your code; so when one of your colleagues makes a change, if that change affects something you have written, tests will show any issues before they go live. Does that sound like Unit Testing? In fact, there’s more than Unit Testing, there’s Functional, Integration,, End to End, Visual Testing, and so many more. (…)

Expectation Level 3 — Everyone needs to know how to structure their code

A simple script where we all learn how to output a hello world isn’t the way to learn anymore, now we have to build components of a Single Page Application, components that are able to communicate with each other. We have learned how to make those components Reusable, how to pass state between them. We need to learn Vuex, and Redux, and Mobx and maybe even learn about Microfrontends. All those tend to create a nice flow between our components and our structure. Was this part of the core JavaScript, no it isn’t. (…)

Expectation Level 4 — Everybody needs to know how to create well-performed Applications

We need to be able to understand the browser, the environment where our code will run on, be able to run on one thread and understand advancements such as Progressive Web Apps. And even lately, use techniques such as SSR to make our websites or applications faster and faster.

Expectation Level 5 — Everybody needs to know how to package their code before the code is released

And before you can release your code online, you need to go through tools like grunt, gulp, then webpack in order to make your development so powerful and flexible, you could work with independent javascript files import your SASS and write tests in separate files, it is all so beautiful. But it comes down with a price, as you had now to know how to maintain tools like webpack. (…)

Expectation Level 6 — Everybody needs to know babel

In order to write ES6, or even TypeScript, you need to be able to know how to configure Babel. As using a framework you need to know some Node.js as you will need to know how to require components and then write tests, and even if you want solely to work with a framework you will need to know how to install npm packages. And that is not part of the real JavaScript, it’s just more learning the ins and outs of the tools.

So my final argument is that as a JavaScript developer, apparently you need to know the language, but you also need to know the tools. Ok, with the language itself, there is a committee that checks the versions and makes corrections and improvements. What happens with the tools though? It is chaos!

How many of us have been in this situation, where we come back to an old project and our npm packages are out of date and suddenly contain security issues, and we are required to upgrade packages and configuration files, or even the codebase structure to try and make the code works again.

This is the complicated world that new developers are coming into. A very complicated one indeed. Below, I will try to describe what each developer should know depending on their level.

Junior Developer — Those developers should know the JavaScript key concepts before they start working on a framework. Frameworks will change but JavaScript will stay as it is, maturing and growing slowly and steadily, and it will continue to be used, again and again, no matter what the framework. They should know how to debug and analyse other developers code and evaluate it. Once they are capable of doing those, they should be able to create their own code.

Advanced Developers — Those should be able able to critique and evaluate but also create code. They should work with the community to make better standards for the tools that we build.

Teachers include Senior developers (teaching doesn’t solely happen in a classroom) and anyone that shares knowledge and they should try to identify carefully what is relevant.

We expect more great features to come to our language but we need to be able to cope with the changes. We need to think of everyone, not just us, we also need to think of how our JavaScript world has become and how we can include anyone. How easy it is for someone new to come in and contribute and work with the language.

Thanks to some of the tools such as the State of JavaScript and some other surveys, we have knowledge of what is used, and how much it is used, what is good and what it needs to be fixed.

Thanks to some superheroes we are learning how to deal with the current situation and the impostor syndrome that it creates we all still need to do the following:

  • Documentation Updates
  • Contribute a tiny fix
  • Finish Your Code Reviews
  • File Bugs — Finding bugs and fixing them
  • Refactor Code
  • Inbox Zero
  • Start Conversation on IRC/Slack

more info can be found (https://davidwalsh.name/conquering-impostor-syndrome).

Thanks to JavaScript we all have an amazing future, we all have great jobs, but we need to protect our world, and doing so we need more superheroes. We need to find a way to minimise the complexity of those tools and also maintain a balance between the core JavaScript and its tools. This could also work by all of us by supporting the open source community and contributing with those projects that we use, for example raise PR’s and writing code to help the tools get better.

--

--