Let's talk seriously about programmers' self-cultivation

Let's talk seriously about programmers' self-cultivation

Today, when I was browsing the Blog Park, I saw a recommended article "A Brief Discussion on English Learning for Programmers". I clicked on it to take a look. I very much agree with the views in the article. English is very important, but the article is still too lofty. I don't quite agree with the specific learning methods described, and I think they are not very practical. It happens that I have an article that has not been published on the homepage and I want to republish it. Today, I would like to take this opportunity to have a serious talk with you about the issue of self-cultivation for programmers.

First, let me introduce my interests and background:

I started participating in informatics and mathematics competitions in junior high school. I majored in software engineering in college. After graduation, I worked in a bank doing big data analysis and project management. Later, I started my own business and worked in a media company and a software outsourcing company. Now I have a studio in China (Nanjing) Software Valley, doing what I like. 15 years of coding experience and 6 years of entrepreneurial experience. My main technical directions are .NET, HTML5, cloud services, application-level development, etc. My overall level is evaluated as a senior programmer and a junior architect.

The first thing to talk about is, what kind of programmers are included in today’s topic?

Before I talk about it, I have to mention a very famous programmer Zhao Jie, who once had a point of view: "Resolutely oppose Beida Jade Bird and other institutions." I used to agree with this point of view, but now, on the basis of "agreeing", I firmly oppose and even dislike Zhao Jie's "expression of this point of view." Because this point of view can help and affect the people who are the grassroots developers that Zhao Jie is least likely to meet, and these people who are least likely to meet are precisely the most common programmers in China, and they are also the people that Zhao Jie is least likely to help or even reluctant to help. If a high-level programmer, relying on his good science foundation, strong logic, and complete language learning experience, thinks that at least this is a programmer, and even thinks that other people who don't learn data structures should not do programming, then it is really very self-deprecating.

In China, programming is not just a hobby, but more often a common profession and a means of making a living.

Big companies have great programmers and excellent architects, but a large number of small companies also have many ordinary programmers. In my work experience over the years, I have increasingly felt the influence and power of ordinary programmers. For high-level programmers, the so-called eight immortals crossing the sea each have their own magical powers, their own achievements, and their own cultivation, but before programmers reach a higher level, there are some "self-cultivation" that is the most basic and universal.

So today's topic is aimed at programmers, that is, all programmers who are writing code or have written code, and also includes programmers in a broad sense, such as project managers, architects, etc.

Do everything with a clear purpose, then

Let’s talk about this again, why do programmers need to improve their self-cultivation?

Do you want to be admired by others and liked by girls for writing good programs? Or do you want to publish articles on blogs, forums, and communities to share your achievements? I think this is the pursuit of a few people, and it is also a higher pursuit.

I think that in China, the purpose of programmers improving their self-cultivation is to

1. Better integration into work, reducing difficulties and increasing achievements

2. Steadily improve your abilities, increase your income, and achieve financial freedom

2. Look at your study and work from a higher level, establish a more appropriate outlook on life and values, and have a happy family and a happy life.

To put it more simply, it means using more reasonable ways and methods to earn more income.

Having said so much nonsense, let’s get to the point

What is self-cultivation for programmers?

It is difficult to explain the positive argument clearly, but the reverse description may be easier to understand. The opposite of self-cultivation is "no self-cultivation". Let me first talk about some programmers who I think are "no self-cultivation" in my work, study, and life over the years:

1. Programmer Xiao Zhang encountered a development problem and was very anxious. He thought of several groups, so he posted his problem to the group and waited for answers. When he found that no one answered, he directly talked to the group owner's QQ. The group owner didn't answer either, so Xiao Zhang searched and suddenly found a post in Blog Park that explained the relevant topic. After reading it, he left a message to the blogger. My email address is: [email protected]. Could you please send me the source code? Thank you.

2. Programmer Xiao Zhang has been in the company for 3 months. The boss assigned him a lot of tasks. He felt that the boss was inhumane. The salary was not high and he didn't get paid for overtime. So he saved as much as possible when writing code. He didn't take the initiative to solve problems when there were customer feedback, and he was mostly perfunctory. After another month, he changed jobs.

3. Programmer Xiao Zhang is writing a functional module that requires some encryption. He searched Baidu and found a coding module. He couldn't understand what was written specifically, but it was just right for the program, so he put it in as it was.

4. Programmer Xiao Zhang wanted to develop a certain function. The project manager told him that this function should be searchable, so he could try searching. Xiao Zhang searched on Baidu, but found nothing after a day. The project manager came and sat next to Xiao Zhang, changed the keywords, and found the solution in 1 minute.

5. Programmer Xiao Zhang has been working for 3 years and has been learning .NET. His salary is still 10,000. He asked the company for a raise but the company didn’t agree. He wanted to change jobs but hesitated. Then a senior said to him, “Read some books, read more books, such as Visual C# From Beginner to Mastery, CLR via C#, Javascript Authoritative Guide, etc.” Xiao Zhang bought them and flipped through them. He found that some of the things he already knew, some of the things he couldn’t understand and didn’t seem to be used. Besides, the book was so thick, should he waste time reading it? Xiao Zhang was entangled in this way for half a year. He still went to work every day, played LOL after get off work, and occasionally complained about his low salary.

6. Programmer Xiao Zhang came to a new company. When he was working on a project to implement a certain function, he remembered that he had done such a function before, but he couldn't remember how to implement it. So he went to his computer to look for the document, but couldn't find it after a long time. He had to give up. Finally, after another 2 days of hard work, he finally implemented this function.

7. Programmer Xiao Zhang was very unhappy one day because his project manager and the product staff of the project team changed the requirements again. The new requirements would require a major adjustment to the entire structure. Xiao Zhang was very depressed and vented his emotions on QQ. He told this story, and immediately, the QQ group exploded. Programmer Xiao Li said, yes, the product is a piece of shit! Programmer Xiao Wang said, yes, the damn project manager sits back and relax all day long, and only knows how to exploit developers! Programmer Xiao Sun said, yes, yes, my last company was like this, exploiting programmers, fortunately I left. Just like that, amidst the scolding, several programmers felt relieved, and Xiao Zhang happily went to play King of Glory.

I think some people may have understood what I am going to say, but some people may not. I can’t explain it in detail, so I can only summarize it in one sentence:

In the process of writing code, be good at learning, master methods, think hard, work hard, and persevere . In the long run, you will discover a different self in programming.

The above are still relatively abstract.

What are some specific ways to improve self-cultivation?

How programmers achieve "higher cultivation" specifically is something that everyone has his or her own way. I cannot go into detail, just like how to improve one's cultivation as a human being. It cannot be explained in a few words, but some statements are easy to understand. For example, a child has well-educated parents who are polite. The child receives formal education from an early age, including elementary school, junior high school, high school, and college. Then the child has good cultural courses and social practice. In the end, the child's cultivation as a human being will definitely be better than that of a child who has not gone through this process.

The same is true for writing programs. Below I will talk about some of the most basic and easy-to-understand learning methods and principles, which I call:

The basics of programmers

A good developer should be able to handle any software program and business problem comprehensively, efficiently and rigorously. Becoming a good developer is a very interesting topic. However, no matter how this topic is developed, the word "foundation" is indispensable. Although the amount of code is an important indicator to measure development ability, it is not enough to be able to write code proficiently. It is also necessary to have a deep understanding of technical principles and business logic. A solid personal foundation and technical foundation will often promote code writing and solve problems with ease.

Most developers may not care about or even ignore the following basics, but they are the cornerstones of the development building.

1. Scientific basis

The process of becoming a developer is different. Some people learn from professional backgrounds, some learn from their hobbies, and some learn from professional institutions. In this process, you may learn basic computer science in a comprehensive or sporadic way, or even not learn it at all. But no matter which one you choose, if you want to become a higher-level developer and write higher-quality code, learning basic computer science is very, very, very important (I say it three times because it is important). Specifically, in practical applications, the following basic subjects are necessary, and they are arranged in the order of learning:

1) Data Structure

In layman's terms, the data structure course teaches you how to use the most basic language types, variables, keyword statements, etc. to handle a variety of logical problems, which we call algorithms. Various problems in daily programming, such as sorting, folder traversal operations, database queries, etc., can all find corresponding mathematical prototypes in the data structure course. The ability to understand the data structure course is also a reflection of a person's mathematical ability. The quality of data structure learning is an important watershed in the level differences of programmers. For the study of this content, the following suggestions are made: Use languages ​​such as VB, C, C++, Pascal, buy a book on data structures and algorithms in related languages, or download related PDF e-books online, study them completely, and write, run and debug all the cases in the book yourself. When you can understand that some common techniques in daily programming are derived from certain data structures and algorithms, you have basically achieved the learning effect.

2) Operating System

The development of all programming languages ​​and the operation of applications are based on the operating system. Most of the scenarios in desktop programming, including memory, processes, file systems, network communications, user interfaces, etc., are derived from the definition and concept of the operating system. A complete understanding of the origin, composition, and operation logic of the operating system is very helpful for multi-threading, complex interfaces, file management, and some scenarios that are difficult to understand in development. It not only helps to understand, but also helps to master more effective programming methods. Specifically, you can buy a book on operating systems or download related PDF e-books, read through it completely, and be able to look at the operating system principles in combination with actual programming scenarios, which basically achieves the learning effect.

3) Database

Traditional relational databases are easy to get started with, but difficult to master in depth. Developers can often quickly master basic database operations such as CRUD, DD, Query, Views, Indexes, and Stored Procedures, but when writing complex queries, designing primary and foreign keys, optimizing fields, and removing redundancy, they can only follow the same pattern but cannot think about expansion independently. The reason is that they fail to understand the fundamental principles of relational databases. The database course systematically explains the ins and outs of relational databases, and understands the mathematical principles or logical basis, which has a qualitative impact on improving the level of database programming. It is also recommended to buy a book related to databases or download a PDF e-book, which can establish a connection between the basic knowledge points of database courses such as the first paradigm and the second paradigm and database programming scenarios, and basically achieve learning results.

4) Compilation Principles

Compiler principle is the scientific basis of programming languages ​​and compilers of various languages. It can be said that compiler principle has created almost all IT applications in the world. The basis of learning compiler principle is data structure and algorithm. Therefore, learning compiler principle takes more time and energy. Since the compilers of modern high-level programming languages ​​are smart enough in code optimization and resource optimization, the impact of learning compiler principle on actual combat is getting smaller and smaller. However, as the saying goes, "prosperity comes at the end", if you think that your study of data structure and algorithm has reached a high level and state, you can further deepen your study of compiler principle and eventually create a bigger gap between yourself and ordinary programmers.

2. English proficiency

The natural characteristics of English, the length of letters, and the historical factors of the development of the discipline determine that programming languages ​​must be based on English. In the programming process, from the keywords of the language to the content of the document or the search engine search results, English is inevitable. Most programmers have an English foundation of around CET-4, but due to their non-professionalism and work environment, they gradually become alienated from or even completely forget about English. In actual operation, most programming language materials are in English, and online programming Q&A content is also in English. Therefore, it is very necessary to restore English proficiency to a level that is not too high but effective, to achieve the following effects:

1) Know the specific English translation, logical meaning and pronunciation of each key word in the language you use.

2) For the relevant methods, libraries, frameworks, tools, etc. involved in the language you use, you can know the English translation, logical meaning and pronunciation of each method, process and parameter keyword.

3) For common programming logic and core keywords, you can use English to organize the description of the problem. The simplest answer is fine as long as it can be understood by search engines. For example, the simplest English description of how to convert an integer to a string type in C# is C# Integer Covert To String.

4) Able to understand 80% of the content and complete technical meaning of any technical manual, document, article or problem description in English within the scope of one’s technical knowledge.

3. Search Method

Any developer should have the ability to search, or even must have the ability to search. The treasures of search engines are endless. Different programmers with the same search awareness may have several times the difference in program development quality, project implementation efficiency, and even engineering product quality due to differences in search skills. Therefore, it is very, very, very useful to master efficient, advanced, and flexible search methods and techniques. The main methods are introduced as follows:

1) Search source selection

  • Although English programming materials are more accurate and efficient, Chinese programming materials are more numerous, so when you encounter a problem, the first choice for searching is still Baidu.
  • Google's ability to process professional Chinese vocabulary is sometimes even stronger than Baidu's, and Google can search for a large number of English resources, so Google is also one of the first choices. However, since Google is blocked, it is necessary to perform FQ operations such as VPN and SSH, or search for the keyword "Google mirror" in Baidu and access it through Google's mirror website.
  • In addition to search engines, professional technical websites, forums, and communities are also very direct and effective search sources. For example, the foreign StackOverFlow website, the domestic Cnblogs blog park, OSChina open source China, etc., all have search functions. By entering the keywords of the question into them, you may get relevant answers quickly.
  • It is recommended not to use QQ groups unless the QQ group owner or members are very free or very enthusiastic. Otherwise, asking technical questions in the QQ group is a very inefficient search method.

2) Keyword construction

The construction of search keywords directly affects the search efficiency and the filtering of correct results. There is no special technique. The key lies in the accumulation of search results. However, the general principle to be followed is accuracy and conciseness. For example, when a description appears, how to serialize and deserialize XML with C#, a very stupid keyword construction is "how to serialize and deserialize XML with C#", while the correct and efficient keyword is "C# XML serialization and deserialization", or "C# XML Serialization" when searching in Google. In daily programming, we must pay attention to the accumulation of relevant methods and experience.

3) Associative search

Associative search does not belong to the category of search engines, but it is a very useful advanced technique in search. Let's take a common example. For example, if you want to use C# and a .NET class to process an HTTP communication, but you can't find a perfect result, but change your mindset. Considering that VB.NET is also a .NET system and is completely connected to C#, you can also try to search with VB.NET keywords, and then copy the perfect code into C# code after searching. Such associative search can not only help search for the correct results, but also train your brain thinking, which is worth trying more.

4) Resource Search

There are more and more open source frameworks, products, tools, controls and other development-aiding things, which are more and more robust and iterative. Finding a mature tool or plug-in has become a necessary method and skill for many developers. How to efficiently search for the desired resources has also become a science. The core method is to know the address of the resource website, such as Open Source China, Github, CSDN Download, pudn, etc. Resource websites need to be accumulated more often, which will be very critical when they are used.

4. Thinking Patterns

Developers must develop a business thinking model. The so-called business thinking means that when doing any project, before writing any code, you need to have a comprehensive study and understanding of the project's business concepts, business logic, and even business processes. Although this is not a mandatory requirement for a project, it is a good development habit. Whether you think you are a developer, tester, or technical director, you must master the business principles to better design or read the project's data structure and process structure. Programmers' thinking is often inconsistent with that of users or customers. Programmers who get rid of technical thinking patterns and are accustomed to using business thinking to solve problems may not be the best, but they must be programmers who are easy to communicate with.

5. Work and programming habits

Some people say that being clean is a waste of time, so they don't care about their appearance. But in the final analysis, it is still a matter of habit. When you develop the habit of cleanliness and make it a habit in your life, you will not waste more time, but appear clean and capable. The same is true for writing programs. Some programming habits may seem insignificant and seem to waste time, but if you stick to them, they will eventually produce unexpected results. Here are some particularly important habits.

1) Use of shortcut keys

Whether using Windows or Linux operating systems, or in an IDE, shortcut keys are standard features of the system itself. In fact, most people can enjoy the time-saving benefits of operations such as Ctrl+C and V. If we spread this concept further, when writing code in an IDE, except for the code itself, all other mouse operations and keyboard positioning operations are replaced by shortcut keys, which will save orders of magnitude in time. However, although it seems so good, there are only a handful of people who really persist in executing and forming a habit. Therefore, changing habits and remembering shortcut keys in the early stages will be a long process that requires constant persistence.

2) Code comments

As a developer grows older and more experienced, the projects he or she is involved in are no longer completed by one or a few people. There will be more and more similar things such as system reconstruction, code reconstruction, work handover, training for new employees, etc. These things will inevitably require re-reading or repeating the written code. If the code comments are complete and clear when the code is initially written, it will be of great help to the subsequent work. Not only will it improve work efficiency, but it will also enhance the goodwill of cooperation. In fact, even if you just look at your own code, if there are comments, it can deepen your impression and shorten the time to find the code. Therefore, any developer should develop a good habit of code comments.

Excellent code comments should be able to:

  • Every function, every attribute and even the division of variables can find a corresponding explanation.
  • Use XML comments more and more often, which are increasingly supported by IDEs. They include not only comment text but also detailed parameter descriptions.
  • The program structure, modules, and component divisions are also annotated.

3) Naming rules

Software companies of a certain size have their own set of naming rules for code writing, covering projects, modules, functions, variables, etc. The benefits of standardized naming are self-evident, but passively and forced to follow naming rules and actively getting used to using naming rules are completely different. A good developer should sincerely hope that all code names are regular and easy to read, rather than being entangled in naming rules that will increase the length of code.

4) Uncompromising programming logic

The opposite of the so-called uncompromising programming logic is unsophisticated programming logic. Unsophisticated programming is not only a very bad programming habit, but also reflects a low quality of life. Many developers are particularly casual when programming due to personal habits, deadlines, and low customer requirements. For example, in order to achieve a certain function, Baidu will find a piece of code and directly apply it. They only understand 8 out of 10 lines of code, and put two lines that they don’t understand into the program. Many such small details are like countless time bombs buried in the project, which not only have a high probability of rework, but also bury risks for the project. Programmers should have a responsible attitude and develop uncompromising programming logic, not force themselves, and not despise the program.

5) Data backup

Accidental deletion, misoperation, computer power outages, file loss, etc. are problems that every developer may encounter. If you do not want your hard work to be wasted and do not want accidental accidents to affect your work, then good backup is essential. In larger companies, there will be complete source code management and information security protection. Regardless of whether you work in a large company, a smaller company, or when realizing the value of your personal code, you must back up your code and documents. The backup methods are flexible and diverse. You can use online CVS, SVN, TFS, and Git source code management, manually copy files to the cloud or local hard drive, or even form a RAID disk array on your personal computer, etc., and develop periodic and regular backup habits.

6) How email works

Communication is the source of progress. If the heated discussions of the development team are a reflection of character and passion, then the email work method is another kind of stability and efficiency. Whether it is work communication at the company level or problem communication of the development team, the role of email includes formal description of problems, keeping records of work, flow of work processes, clear division of responsibilities, etc. Getting used to communicating major issues and important matters with colleagues and supervisors through email will be very helpful for team collaboration.

The above methods are my feelings and experiences over the years, and have helped me a lot. I hope they can help everyone. I cannot say that they can definitely “improve your self-cultivation”, but they are also effective ways to “improve your self-cultivation”.

Finally, I want to talk about the power of persistence.

Let me share a real story. There are two developers in the company. One has been working on .NET for many years, but he is very slick. He saves money whenever he can and is lazy whenever he gets a chance. He always thinks he knows everything when he is asked to learn new knowledge and new methods. The other has no .NET foundation and has been doing low-level language development. He only started learning .NET and Web front-end in 2015, but he is very active in doing things. He takes time to study almost every day. He figures out what he doesn't understand. When he encounters a scenario he doesn't know how to use, he goes online or asks for help. After the project is over, he thinks over and over again about what can be improved. From 2015 to now, in just one year, the development of these two people is already worlds apart, and the salary gap is getting bigger and bigger. The latter can already manage small and medium-sized software outsourcing projects on his own, while the former is still muddling through. Their respective developments in the future are also completely foreseeable.

What I want to say is that some of the principles and methods shared in this article are easy to understand, just like the stories we often hear, such as the 365th power of 101% and 99%, the principle of 10,000 hours, etc., but there are only a handful of people who really think about it seriously and put it into practice. Perhaps, persistence is the greatest accomplishment of a programmer. I wish you all the same!

<<:  VR Oscars: Proto Awards announces 2016 winning apps - who are the big winners?

>>:  [Photo] iPhone 7/7 Plus performance review: crushing Android flagships

Recommend

Brand marketing and promotion, how to capture the young group?

In May, which is Mental Health Month, Burger King...

ARM has also called a halt. How much impact will this have on Huawei?

Yesterday afternoon (May 22), ARM China's PR ...

Tik Tok live broadcast layout and strategy!

Recently, it has been found that many brands are ...

Is there a winning marketing technique?

I am often asked the following questions: "O...

Analysis of advertising in the home furnishing industry!

As people's living standards improve, obtaini...

Talk about the four ways of ground promotion using the rules of the Internet

Regional promotion can also be understood as grou...

User search behavior value: Analysis of the value of vertical search engine data

Vertical search engines are search windows provid...

How do experienced operators optimize delivery strategies?

Same product, same price, but very different conv...

Learn the detailed steps of WeChat applet development

Many people hope to create a WeChat mini program ...

How to promote short videos? I have summarized these 6 points!

In recent years, with the rise of short videos, m...

Xiaomi's sales volume catching up with Huawei? It's a bit difficult

[[133368]] When the sales of two mobile phone man...

Four reasons you don't need to replace your smartphone every year

Smartphones have made significant progress in the...

Ant Eight-Handed King Three Courses: Prop Ball, Graphics, and Body

Course Catalog ├──Prop Ball | ├──1..20191026 Prop...