How to be a cool programmer

Source: Internet
Author: User

Copyright belongs to the author.
Commercial reprint please contact the author for authorization, non-commercial reprint please specify the source.
Vczh
Links: http://zhuanlan.zhihu.com/p/19796639
Source: Know

I have an idea that is not necessarily right.

The first article (the first article contributed to the vote-Vczh's daily-to-know column) really gave me the inspiration Yes, the title of the picture is from the comments. In order to answer the endless menstrual problems in the future, I decided to write an article about my understanding of the awesome programmer. Why do I have to say this, of course, first of all I think I am very good, or I will not say this (wrong

What is the difference between a fantastic programmer and a non-stick programmer? Do you know a lot of algorithms? Do you know more about the API? Or do you know more about the tools? In fact, you can't use these simple indicators to define. We think that a person is a good man, usually refers to the person who knows a lot of things. However, if you know a lot of things and write the program is very stupid, or half a day to make a problem, we will start to doubt our judgment. What the hell is that?

In fact, it's the same as being smart--intuitive!

Half of intuition comes from extrapolate, half of extrapolate comes from that one, and when you have that one for a lot of problems it's obviously because you've touched them, you've had problems with them, and you've got to deal with them. So how can you touch and solve a lot of problems? The only way is to get through that long period, usually more than 10 20 years. You are smart, you can learn a lot of things, but because the practice of time is not enough, still not enough has become a good programmer. So the good is not a quick thing in itself, it is the accumulation of knowledge and experience, then the use of your knowledge and experience of proficiency.

I have been recommending this article to others (can adult thought still improve?) "Learning and Shizhi" is about how to become a man. It's going to take so much time first. So much of the time is it possible to brush up on those stupid ACM topics to be a little more awesome? You brush six months can, brush ten years? Obviously brush the ACM topic can only let you from the idiot to become a rookie, behind still have a long way to go. The article gives us an important conclusion is that you use this large period of time to practice, each time you have to be difficult enough but just can be made out of the topic to do . By the time you do this, you will feel a lot of problems will be easy, and when you repeat the solution they can only get very small exercise, so you have to find a more difficult topic, a difficult enough but just can be done out of the topic. Of course to find a good topic is not so easy, anyway, when the young time is not valuable, and so you try to do a few topics found that they do not come out at all, you know what is called just can be done out .

So forced himself after so many years, even as I do windows all day, meet the need to use Linux is just ask people to see the instructions (but Linux seems to have no instructions) things. Because of the nature of the difficult things you will, the rest of these operational problems, only skilled unskilled difference.

But what is hard enough to make? In fact, I think that when I was a child, the programming process was a good example. At the beginning of self-study when it is really difficult is very big, learned the while cycle after half a year I still can not control themselves by copying code to do the loop of things, this feeling is like dumb English, you know that thing, but with the time just can't remember. Of course, with the gradual deepening of training, this can be overcome.

I was walking along such a route at that time. First will use the function to draw a few diagrams do blur ah sharpening the simple filter, in fact, there are algorithms to copy that is the truth of a few lines of code. Then start learning how to write high-performance programs. I feel the performance is almost started to toss how to implement an RPG. Each step takes about a few months, and the leap between steps is great. Of course, specific to my situation at the time, inevitably will eventually fail, this is mainly due to the problem of thinking, because no one told me how to do. I remember very clearly third day time to do an RPG, the results in VB6 inside try to use picture control to do, not die is strange. After two years I finally know what is a reliable method, so I made this (works: "World Biography"). This link can also download to my original Delphi write code, childhood code is rotten, although it seems a bit complicated, ah hahaha.

The game is not enough to finish, it is necessary to start thinking about the modular problem. How to do a game with the GUI library? How to do a game with the scripting engine? How do you make tools for them? How to write a game engine? How to write an RPG Maker? Every problem you want to do simple can be done simple, want to do complex can also be very complex. So when I solve a problem one by one, have already come to M$ra, this is why I would later do gacui and all kinds of strange compiler research various strange type system reason. Of course it's not just for the game, but when you make a game that you can use, you're going to start thinking about how to make it generic so that the software can be used. every problem has finally risen to a step, and you find it easy to solve the problem without wasting time .

I think this should be a way of pointing out the road, which is why I think those who spend so much energy to study tools are wasting their time. Work to use things should occupy work time to study, after school time is of course spent on improving their meta- programming level : Probably is the algorithm Ah, architecture ah, design patterns Ah, Unit test Ah, all kinds of language are used in the things. But in order to train these abilities, you have to get through the real thing to solve any difficult problems. So the best choice is big clean problem. These questions are clearly defined but very complex questions, such as the one that I tried and finally succeeded in my senior--how to compile C into x86. Of course it's just a question, if you want to make it practical, either you need to know how to write a PE file, or you need to know how to seamlessly combine the data structure and function pointers of C + +, which is less clean. The solution to these corner problems is purely material, and not related to your level, if there is no interest, there is no need to solve it. of course it is not no good to solve it, because the solution you understand , you can use this knowledge to solve your future work may encounter the horn point problem. But this should never be your motivation to learn programming after school, which is like an added benefit.

Here we can understand that the good programmer, in its meta-programming level is very high at the same time, but also know a lot of strange knowledge, so that when you encounter a real engineering problem, you can correctly in the vast amount of knowledge already mastered to associate the right that a small fragment, The result is a brief study to solve it immediately. This is also why we feel that the people who have a lot of knowledge, because this is a necessary condition. This is why we feel that the people who are very happy write the program very quickly, because this is the result.

Of course, for beginners who are just getting started, they are still in a situation where even a tool is useless, and that naturally should take some time to familiarize yourself with the tools. But when you've mastered C + +, C #, Haskell, Erlang and spent a lot of time studying what go and swift, it's not going to work. Because the issues that go and swift need to study are already included in the time of the previous C + +, C #, Haskell, and Erlang, you should use go directly, and if stepping on the pit you jump out is quite easy, there is no need to take the time to study the details of go. Of course for those who only write a few lines of PHP and Python, it's good to take the time to study go, because they're still in a situation where even a tool is useless. That naturally should take some time to familiarize yourself with the tools.

When you have at least a general purpose programming language and a system API, you don't have to spend a lot of time studying another general purpose programming language and another system's API, because this is extrapolate content, Just read the documentation and you'll be proficient at once. If it's a completely different language, like C # and Haskell, you'll still be able to spend time studying another door after you've learned one.

These things are not absolute. What you need to take the time to do depends on whether the problem is hard enough, whether it's just good you can do it, and then you can't do it any harder . As long as you keep this training method for 10 years, it's hard to think about it.

When I think about it, I can't help recalling some silly thoughts of my childhood. Third day tried to use Visual Basic 6.0 to do a basic interpreter, of course, the last to make, but the performance is very low, because I have the syntax tree is saved in the table control ... However, under the knowledge of the time, can be used to solve such a problem with the idiot, but also a lot of progress.

How to be a cool programmer

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.