Why programmers stagnant from an analysis of competitive gameing.
Tags: webdev, react, angular
Published: 2020-08-28 22:37:47

I have been a League of Legends player for basically as long as a programmer. This dual time investment into seemingly unrelated field gave me some unique parallel insights. Most importantly, why someone cannot improve albeit putting in years of efforts.

Let's start with League. It is a very complex video game, because within half hour of game play, there are countless factors that make or break the game for you. The choices start with champion selection. Whether your team synergize, whether each role counters that of corresponding enemy's, and whether the champion is strong at the moment. After selection, each of 10 player starts making his own decisions every second, which makes it impossible to predict the outcome. 

However, despite such complexity, there exist players who are so good at the game that they make others look pathetic. Countless gladly pay to see high-level gameplays all the time. This really begs the question, how is it possible for some to become so good? However, in reality the real question is why some never improve?

I am a platinum player, above 90% of the player by statistics. I know less than 5 people personally who are better. This meant I witness a lot of my friends who are stuck at lower levels. This is even when most of them play more than I do. What is most interesting is that in spite of their blatant motivation and knowledge to improve, they never succeed. This means that there are a lot of serious improvements that they know but never achieve.

One of these major changes is to conform to the meta. The meta is the concept that certain characters, play style, or choices are much better given current conditions of the game. For example, if high damage champions became really strong since a game change was recently introduced, then one should play those champions all the time. However my friends would rather stick with familiar champions or just play whatever they want randomly. So they always begin the game from behind and find it hard to outcompete others.

The meta also exists in programming. For example, back when the web exploded, those web developers enjoyed absurd compensations because they were the minority who followed the meta. They succeeded when they could have been crappy programmers. That is the thing about meta, if you are riding wave, you will automatically do better. It does not matter whether others are actually better skilled at their thing, because there exist conditions that are way larger than skills can compensate. The new meta in 2020 is machine learning, and maybe virtual reality.

Another common problem in League is with getting better at core skills. Core skills are usually habits that affects the game greatly and thus divide player level hierarchy. It then means, not acquiring core skills is a very good reason why someone does not climb. In league, such a core skill could be map awareness. This is a term describing how mindful someone is of the location of the other 9 players. To be map aware, you should look at the mini map in the game every 5 seconds or so. It sounds pretty easy, but core skills are hard to learn or identify as an area of improvement. This is because core skills are often preceded by bad habits or faulty mentality that obstruct learning.

Programmers also suffer from lacking core skills. One of such can be the ability to really understand each small piece of code individually and how they relate or unrelate to each other. Best demonstration of this is probably the joke that sometimes programmers don't know why code does not work and then why it worked later on. The root cause the not-understanding is that the programmer never learned the subtlety of code. This can be an unfamiliar syntax or unknowing side effect. Therefore he cannot translate the code into meaningful semantics in his mind. 

This happens a lot with excessive using powerful libraries or frameworks, because you need to be focused on how to make the framework happy. A previous team lead of mine gave this opinion about Angular 1 years ago. He said if we were to use Angular we would just be coding Angular and not javascript. This is later confirmed by my friend at another company, he said his coworker would just find a directive to solve Angular problems and not dig deep to think if he can solve it himself. It also happened to me when I felt compelled to put $scope on everything. Powerful abstractions and conveniences increase productivity but it can also makes naive developers mindless.

An example in React is not having to worry about re-rendering because the library takes care of it. I have seen my own code do a lot of unnecessary calculations because a sibling or parent need to re-render and React would call the functional component regardlessly. I can only let this slip by since not worrying about re-rendering is the answer I got from React discord. 

Quick favorites of mine are "this is recommended" and "it's the best practice".

Another big problem with League players is unfocused investment. This means that many players pride themselves in knowing lots of different champions or different roles in the game. Usually, trying something new is a good thing, because innovation is the definite precursor to improvement. However wrong areas of innovation definitely does not produce improvement. Recall that the game itself is extremely complicated. This means that for a player to do well and improve in a competitive environment, the player really needs to eliminate noise and work on one thing at a time. For example, for someone of poor map awareness, he should play the same champions for a while so that he can maximize the necessary mental space to correct his bad habit.

In programming, this translates to language or technology chasing. A lot of people always ask what is the hottest language to learn. However, languages do not really differ from one another. C is surely a lot different from javascript, but javascript is very similar to java, python, C++ and many other object-oriented languages. This means that language-chasing not only brings minimal benefits, but also distracts real improvements in core skills that truly matters. The coder could benefit much more from refactoring his code base to learn from past mistakes and others' techniques than learning a new language.

In a competitive and complex environment, there are those who are gods and those who are forever down at the trenches even though the path upward is usually publicly available. It is truly remarkable why most never improve and not why people do well. Part of the answer is unfocused investment. Efforts into new things will unlikely be fruitful if core skills are still unpolished. On the other hand, turtling in specific niche while other new fields are blooming is surely a mistake as well. It is very hard to navigate and determine when and how much effort to put toward. This is why some are left in the dust, they are looking and running at the sub-optimal or entirely wrong directions.