DEV Community

kevin074
kevin074

Posted on

Why programmers stagnant from an analysis of competitive gameing.

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.

Discussion (4)

Collapse
pentacular profile image
pentacular

One thing that is often overlooked is that time spent in practice doesn't necessarily make you better in the way you want.

If you practice doing things incorrectly, you get better at being wrong.

You need to make sure you practice getting things right.

In programming, I often see people get attached to models of things which mostly work most of the time, but are more complex than need be, and fundamentally incorrect, so as problems are encountered they end up making the model even more complex and ever more subtly incorrect.

Attachment to practicing understanding things incorrectly is the greatest stumbling block for programmers in my experience.

When someone tells me that they know C, I ask one question.

char c[3];
// what is the type of c?

The vast majority give the wrong answer, because they have been handicapped with a defective model of how C works.

Collapse
elmuerte profile image
Michiel Hendriks

If you practice doing things incorrectly, you get better at being wrong.

Where is the bookmark/highlight quote feature on dev.to

I see this mistake being made a lot. The most (in)visible form is "experience in years". Just because somebody has 10 years experience in a field doesn't mean they are good. They could have been doing the wrong thing for a long time. The experience is "measured" on the scars. That is, mistakes people made and learned from.

People don't learn from success. People don't even know why something was successful, too many variables. Failure is easier to diagnose.

Want to get better? Then get good at failing and analyzing the causes.

Collapse
kevin074 profile image
kevin074 Author

that is definitely right, one of the biggest sentiment in my article is implicitly about correct practice. What correct means also differs from the individual. That is why it is difficult for people to improve. They incorrectly identify where they should improve on and thus are stepping in the same spot no matter how much time spent.

Collapse
joelbonetr profile image
JoelBonetR • Edited on

Gaming can improve your Logic and your response time, also it improves your visual precision and your abstract thinking about an entire process.
Each point of course depend on the game type and features. Playing Detroit: become human may not lead you to enhance anything but response time on the action time cinematographies, instead, playing Skyrim can add logic and abstract thinking and lead you to plan how you will build your character on the first hand and the following few hundred hours. Call of duty will increase logic to plan which equipment you carry to the battle and map acknowledgement and quick decision taking.

There are studies of all this (peer reviewed).

By the way almost everything you learn out of programming could help you to code better as programming is an abstraction of the real world so you'll need to be conscious about how you manage the knowledge (data) across different skills.

Talking about META, this is like when a bug turns into a feature. If you balance your game well no META will appear and no balance changes will be needed, instead they nerf and buff characters or features to change the META, making you change your game to something that could not be ideal, so this point is not too good for anything.
There are games like Clash Royale while even having META, if you abstract your knowledge and build a brand new deck by your own, you can overcome the META and win matches using your out-of-meta deck simply by a well interaction knowledge and using your logic inside the gameplay. There are others that simply are broken like overwatch being Paladins much better for that concerns (much more balanced).

On the other hand there are games that uses randomness as basis. Those are meant to engage people to buy power ups or retrying tones of times to beat a stage. Those are bad for you because you have few or no control about winning a match, let's add some examples: Candy Crush, Mario Party, Mario Kart (single player).

Then there's another concern and it's about the approach the game takes to the required skill. Valorant or CS: Go are poorly realistic so your logic tells you to do an action and then you loose, so you have to internalize the gameplay, instead on increasing your logic you are taking knowledge of a bad one; example: someone throw a grenade near you. Your logic tells you to run your ass off the place for not being killed or taking the grenade and throw it as far as you can, but the game doesn't let you run or perform the take and throw action. On call of duty you can sprint as fast as you can to avoid the damage or throw back/away the grenade, which is quite accurate and better according to a human inherited logic and way to react to a problem.

It's an entire case study (not new) and with tones of little details to take in mind 😂😂