Introduction: How can an excellent developer become great?I still don't want to become great: how can a good developer become a good developer?There is no definite path from step 1 to step N. Alas, I don't even know what step N is.Those who can think logically understand that the lack of a certain route means that it will be a hard journey to go from novice to master.In the past few years, I have spent quite some time thinking about this problem.What's next?What can I do to become a fairly good developer from a good developer?
What is success like?
I do best when I have a clear goal and a measurable standard of success.For example, I want to run a mile in five minutes, which is easy to measure, and success is clearly defined.I know how fast I can run a mile now, and the Internet is full of suggestions and training programs on how to run fast.I can choose a training program and train hard. I am confident that I can finally reach the goal I expect.And this is very easy to measure. Every week I can know how far I am from my ultimate goal(Beijing website production)
However, how do you measure whether you have reached the level of a "quite excellent developer"?In short, you can't.This goal, as mentioned above, is very subjective, very broad, and can hardly be measured.So, how do we define something that can be measured?
Rather than running a mile in five minutes, we can start by comparing ourselves as programmers and the programmers we hope to become.What experience does a five minute mile runner have that a ten minute mile runner lacks?What experience does a master programmer benefit from but a novice programmer lack?The key here is experience.
We have all had certain experiences that have improved our skills as programmers.We have learned a new language, and let us have a new way of thinking.Or, we have all meticulously refined the perfect design, just to observe the defects exposed in the harsh reality.So we become better programmers.So, some experiences give you new skills.Some of them are different models and can help you understand why this is so.It is these experiences that teach you, affect your thinking process, affect your method of solving problems, and improve your design.Conveniently, it is easy to measure whether you have had a particular experience.(It would be interesting to think of these experiences as achievements.)
Although it has taken me some time, I am not worried about my immeasurable goal of reaching the level of "quite excellent developer".If a developer can be distinguished by his experience, perhaps we have a clearly defined path towards the general direction of "excellent developers".I guess this path should be like this:
1. It marks the experience of growing from an ordinary person to a programmer
2. Choose a certain experience to pursue
3. The pursuit experience has been completed (achievements have been unlocked!)
4. Reflection on experience and in-depth thinking.[A]
5. Go back to step 2, this time to choose a new experience.
How to start the first step in a better way instead of crowdsourcing.Here I give some achievements in programming, loosely grouped.I will provide you with various ways to create your own ideas at the end of the article.
achievement
1. Learn a variety of programming paradigms:
Write a program in assembly language Write an application in functional programming language Write an application in object-oriented language Write an application in a prototype based language Write an application in logic programming language Write an application with Actor model Write an application in Forth language [C] 2. Experience the context of programming on different platforms:
I wrote an ordinary web application I have written a common desktop application I wrote about a common mobile phone application I wrote about an ordinary embedded application I wrote about a real-time system 3. Enhance your understanding of the modules commonly used by developers:
I have written about a network client (HTTP, FTP, etc.) Write about a device driver Write a B-tree database Wrap an existing library to provide a better (more enjoyable) user experience Write an application or framework to provide plug-in model Written test framework Written programming language 4. Let yourself know the wisdom of koans, katas and years:
Completed five code katas
For a language you want to learn, complete programming koans Take a codetreat Read SICP and complete all exercises 5. Open source programming:
Share code for an open source project Patch accepted Get submission permission in an important open source project Publish an open source project Refactotum implementation for an open source project 6. Learn by teaching others [D]:
Give an enlightening speech Speak in a local user group Speak at a conference Teach a training course Publish a Tutorial Publish a constructive code review of an open source project Write a programming book About achievements
Now, let's continue our discussion for a while.Notice that every achievement is measurable.Each is a boolean: you are finished or not.For example, it is difficult to measure whether you have learned a functional programming language, but it is easy to know whether you have written a program in a functional programming language.The latter is objective, measurable and Boolean.This measurable intent applies to all of these achievements.
Admittedly, this measurability is not perfect.For example, when you make a speech at a conference and say that you can be generally competent, you are said to have won this achievement.But if you are reading this article, I suppose you want to become outstanding.You know it's very bad to claim to do it just to cross an item off the list.(High end website construction)
Since we talked about improvement
Now that we talked about improvement, how would you improve this list?
This list is now used as a gist on github. You can fork it at will and add more achievements (make sure your achievements are measurable).Or fork it and mark the achievements you have conquered.You can also mark an item you are working on (for example, you can look at these forks: Justin Blake, Pierre Chapuis, Yann Esposito.)
Or make a comment: What experience has made you a better developer?And which achievement will you unlock next?
notes
[A] I cannot sufficiently emphasize step 4.In order to achieve almost every achievement, you should pause and reflect on these experiences before moving on to the next one.reflect.Ask yourself what you learned and take the time to write down these ideas.Better still, share it with others, and compare it with others who have also achieved this achievement, to see how you have learned.
[B] You can go to coderwall.com to see the achievement based model. It's very interesting.
[C] Forth is basically his own paradigm
[D] I suddenly thought of this sentence: "learning in teaching" - Paulo Freire