终极程序员跨过的艰难六步

1 Stop complaining. Get ready for the long journey, or just set it aside and go bird-watching.

For those who truly want to become an excellent programmer, who want to become an expert, who want to become the ultimate figure, if it is truly worth doing, then investing ten years in it is nothing, right?

The first step is to bite the bullet. Accept that this process will take more than ten years—it is a lifelong pursuit. Do it only because you want to do it. If a person is unwilling to do something, he will never become an expert at it.

2 Write lots and lots of code

At the same time, write lots and lots of code. It doesn't have to be good code. For a long time, the code you write won't be good code. Good code, good taste, requires a lot of practice to cultivate. Whenever you're interested in a new tool, a new algorithm, a new problem, or whenever you encounter a problem, write code to practice it and try to use it as much as possible.

The learning process never stops. If you learn with the attitude of learning as much as you can every day and getting the maximum "mileage" you can, you will go far. Get into a state where any day/week/month without learning something interesting is a failure. There are plenty of cool, interesting things waiting for you to learn every day. Even if you've been learning for 15 years, although they become harder to find, they can still be found. No one can master all the knowledge in the programming world, so if you feel there is nothing left to learn, go find a new project and write more code.

As you do these things, pay attention: look for patterns in the middle of it all—things that can be automated to do useful work, or code you've written so much of that it can be pulled out into a shared library, or other places to centralize. Look for programming languages that are simple for specific tasks. Find out which programming languages are not good at the same tasks, and think about why some languages are more productive than others for these tasks.

But the most important thing is to write lots and lots of code. But remember, if what you're doing is no longer interesting, there's no need to keep doing it, if you can't enjoy the process along the way.

3 Read more code

When you have accumulated some projects, start reading other people's code. At first, this is very difficult. They do many things you've never done, or use styles you're not accustomed to, or even use programming languages you haven't learned. If you find it interesting, read as much of this code as you can. Don't worry about deeply analyzing the code of any given project, at least not at first.

Reading new code can show you new ways of thinking, which helps expand your mind. Expanding your mind is very important for maintaining progress. It helps ensure that as you move forward, you can continue to discover new things to learn.

Be sure to communicate with other programmers. Ask them how and why they do those particular things, whether they approach things from a different angle, and ask them if they have any advice about your code. Be polite, because senior programmers are very busy. Respect will take you far. This is a tightly knit industry, and reputation matters.

4 Learn many programming languages. Become an expert in some of them

You won't actually have much spare time, at least not enough to learn many languages at the same time, unless you're exceptionally lucky. So you can learn many programming languages at a shallower level—enough to understand what makes them popular, what makes them good at the fields they're commonly used in, and what their flaws are. Expanding is important. Don't limit yourself to one type of language, such as imperative or OO languages; branch out and learn some functional or declarative languages.

Learn a dialect of Lisp. You won't use it for your day-to-day coding. But learning and practicing it will make you a better thinker, and you'll gain a deeper appreciation for the charm of simple recursive systems. Keep studying and practicing it until the moment arrives when you can't help but exclaim "Aha!" Until that moment, you'll think it's a weird lump of syntax and clumsy usage. For the rest of your career, it will become one of the most breathtakingly elegant concepts ever devised by humankind.

After that, learn a purely functional language. I recommend Haskell. It forces you to think purely functionally in ways that other functional languages, including Lisp dialects, do not. Once you understand the purpose behind designing monads, or have other "aha" moments, you will enter a higher level of thinking ability and of designing elegant systems.

Finally, learn a declarative language. SQL counts, though it's relatively weak. Prolog is often recommended. Also XAML, XSLT, and XQuery. A declarative language is one where you tell the computer what you want it to do, and the computer figures out how to do it; an imperative language is the opposite—you tell the computer how to do something and hope it correctly does what you want; in a functional language, you describe how data and types are transformed.

5 Create your own programming language

It doesn't need to be complex, advanced, or even particularly elegant. It doesn't even need to be an original idea. I often recommend writing a Lisp interpreter (even better if written in a Lisp dialect). This is a great way for you to learn the fundamentals. In fact, you can get a good feel for the basics of programming language design: lexical analysis, parsing, compilation, interpretation, virtual machines, and how basic design choices affect how practical a language is in various fields.

You will gain the following 3 things in the process:

1) You will have a deeper understanding of how the tools you choose work, so you can write more efficient code.

2) You will begin to realize the reasons behind the design choices of mainstream languages and tools. This will help you choose the tools you use more effectively.

3) You will catch a glimpse of undiscovered possibilities that still exist in tools and languages, broadening your horizons and allowing you to discover new, interesting, cool things to learn and experiment with.

6 Learn things that no one else has ever learned

This is the most difficult and final step. Another ten years. Keep your interest and do interesting things; leave behind the things that don't bring you enjoyment.

English source:become-a-good-programmer-in-six-really-hard-steps/