A programmer's career is an interesting journey full of ups and downs. Given its steep learning curve, it is entirely predictable that you will go through periods of frustration, enlightenment, and arrogance, along with various emotional experiences in between. In this article, let's lighten up and review each of these stages through a series of hilarious GIF images.
Stage 1 - Rookie

In the early days of entering the workplace, we are all full of passion. During this period, you have no clue and simply don't know what to do. Like a fish out of water, every line of code is a mystery to you. Doctype? Huh? What the heck is this <div> actually for? The first stage is daunting, nerve-wracking, yet exciting. Just how many damn languages are there to learn?
However, your greatest advantage might be that you don't know how deep the water is(Translator's note: the original text "you have no idea how deep the rabbit hole goes" alludes to Alice falling into a bottomless rabbit hole in Alice's Adventures in Wonderland). Learning HTML is just a small step forward.
Stage 2 - Getting Started

Although it took some effort, you eventually learned enough knowledge to take your first step into the programming world. While the first stage was entirely a confused state of "How should I / Where do I start?", by the second stage you have begun to slowly build your own skill system. Of course, the syntax of CSS for defining styles is still unfamiliar to you, but at least you can modify the code in your newly purchased code editor and see the effect of the changes in the browser. That is a wonderful feeling!
Stage 3 - Extreme Frustration

Imagine you are lost in a cave, shining a flashlight through every tunnel to find a way out. With every step, you hope to see a glimmer of light. Unfortunately, the learning curve in our field is very steep. I'm sorry to say that glimmer of light won't last long. You must be prepared to spend hundreds of hours in this stage. When you are desperately trying to figure out what those things that drive you crazy mean, you need to read technical books over and over and over again.
If you feel too frustrated to bear it, please calm down and think about how every one of us has felt the same way as you at one stage or another of our careers. You are not fighting alone. Keep going, and soon you will reach the "enlightenment" stage.
Stage 4 - Moment of Enlightenment

The moment of "enlightenment" is one of the best feelings in the world: in an instant, suddenly, you "got it" - "Ohhh, now I finally understand." For myself, I find that major breakthroughs in programming usually happen at night, while others are sound asleep. After I read the code eight times, what was once elusive becomes at least a little clearer.
At this stage, all the skills and languages you have learned begin to come in handy.
Stage 5 - Fragile Code

Like the previous stages, the "fragile" stage is also quite long. In this stage, you successfully build applications and achieve the desired results, but the underlying code cannot cope with sudden changes in customer requirements(At this point, you are successfully building applications and achieving your desired end result, but the underlying code is one client feature-request away from popping. Translator's note: the second half of the "but" sentence is rather difficult to translate; hopefully an expert can rescue it.). At this time, the methods you write are dozens of lines long, and the concept of testing has yet to form in your mind.
But at least you are making something real. For now, please limit your pull requests on GitHub to writing documentation and fixing typos. Don't underestimate how helpful these efforts can be to others.
Stage 6 - Imitation

The imitation stage is very important. There is no better way to learn proper programming techniques than to imitate the code written by the masters you admire - even copying their code line by line. Don't be discouraged; every artistic career involves an imitation stage. Fortunately, GitHub makes this silent admiration easier than ever. Of course, copying code can only help you so much, but it is a good start. Imitate those who inspire you, and eventually you will begin to form your own style.
Stage 7 - Self-Righteousness
At this point, you finally begin to fall into a situation where: you certainly still have huge room for improvement, but your confidence is also inflating rapidly - perhaps too fast! People often say that in the first few years, you are not yet capable of realizing how ignorant you are!
In this stage, avoid the impulse to become too arrogant. Arrogance is good for no one, and it will only make the better future you shake your head when looking back at the past. When you want to leave a sarcastic comment on GitHub, Reddit, or StackOverflow saying "Dude, learn how to program," don't do it. Not long ago, you yourself were a complete rookie. Please spread positive energy instead of putting others down. We are all on the same side, just at different stages.
Stage 8 - Learning Vim

If you have ever observed a developer you work with, marveling at the speed at which he operates in the code editor, then he is likely using Vim. Although Vim's learning curve is very steep, once you master it, your workflow will also look as magical as magic to onlookers.
This is the stage where you begin to take control of your programming skills and workflow, and the right tools are just as important as the skills.
Stage 9 - When Code Becomes Art

Although it takes thousands of hours, one day you look at your code, reading it as easily as operating a command line, and you realize it is practically a work of art. Your code has version control, good abstraction, perfect testability, scalability, and is easy to read. At some point in your career, you may have reveled in being able to write mysterious, confusing but functional code. However, using every possible trick and hidden feature of a programming language, or simplifying complex logic into a single line just to show off your cleverness, are not signs of a mature developer. On the contrary, they reveal an arrogant developer who has no consideration whatsoever for future code maintainers.
When the readability of code becomes as important to you as the functionality it implements, code becomes art. At this stage, you are writing code for humans, not for machines.
Stage 10 - Experienced

When programming becomes instinct, you reach the next stage of your career. At this point, you no longer think about languages and frameworks, but simply identify problems and choose the right tools from your development toolbox to provide solutions. An experienced developer understands why the lone cowboy approach of single-handedly working alone is rarely the right path. Discussing every new feature with all members of the project team, preparing whiteboards, writing stories (translator's note: story), and generating tests - these are all tasks completed before writing the first line of actual code.
At this point, you have become a mature, thoughtful developer that everyone else wants to work with. Congratulations!
Stage 11 - Rock Star

Very few people can reach this stage. The rock star stage is the pinnacle of a career. In addition to your daily work, you often speak at seminars, becoming a leading figure behind countless open-source projects; you find time to participate in and contribute to the future development of the web through mailing lists, while also helping newcomers on IRC. You are the kind of person who enjoys writing compilers and parsers.
Others call you a rock star or a ninja, but you hate such labels. You know better than anyone else - there is no end to learning!
Source: http://blog.jobbole.com/56252/