This book is a summary of the programmer's cow Chen Hao's articles, including technology, communication, engineer culture, etc. After reading through the excerpts of the best part. Open the book is beneficial, can read the excerpts will also benefit, of course, it is best to read the original text, the knowledge into a more efficient. In addition to this book, there are some of his articles are also very worth reading, including how programmers cash, how to learn English topics.
05 Competitive programmers
Good programmers aren't necessarily the most skilled programmers, but they are the ones who are able to work on theEnsuring software quality and productivity in an imperfect work environment
programmer
True harmony is not just one voice, but a hundred voices
The value of English for programmers can never be overestimated, and can even be seen as a shortcut to outperforming others
In making decisions.Focus more on what you can get
and not something that could be lost.
Four steps to make the leap to competitiveness
I. Cognition: mastering quality information sources. Focus on information channels, information quality, information density
II. Knowledge:
- Knowledge Tree: To learn systematically, you need to summarize it into a knowledge tree or knowledge map. Knowledge consists of multiple knowledge segments, a knowledge segment contains various knowledge points, a knowledge point will lead to related knowledge points, and the knowledge points cross and depend on each other.
- knowledge-based reasoning
- methodological approach
III. Skills
- Strive for excellence: Repeating training with the same method is like moving bricks, you can't have the most professional skills. Find a better way in each training session and learn from the experience to make the next training session better and more efficient.
- Let yourself make mistakes.
- I'm looking for an expert.
IV. Leadership
- Identify your strengths and talents
- Identify your interests and career
- Make your habits and methods advanced
06 Problems in growing up
How can we ensure the progress of the project?
Try to break up long tasks into multiple sub-tasks to be completed within a week, as the more achievable the task is, the more execution will be mobilized. Tasks that can be accomplished within a week are the most appropriate.
08 Effective Learning
Active and passive learning
Human learning is divided intopassive learning
cap (a poem)Active Learning
Two levels. The average retention of learning content in the forms of listening to lectures, reading, visualizing, and watching demonstrations in passive learning is 5%, 10%, 20%, and 30%. Active learning through discussion, practicing, and teaching to others increases retention to 50%, 75%, and 90%, respectively.
Don't blindly pursue speed and quantity of reading, which only creates the illusion that this is diligence and growth. Be discerning, practice, summarize and generalize, andMechanical repetition doesn't lead to qualitative leaps
。
The Ultimate Purpose of Learning
I. Learning is about finding ways
The purpose of learning is not so much to find answers as to find methods. Only by mastering ideas and methods can we truly have the ability to solve problems.
Second, learning is about finding the principle
Learning is not just about knowing, it is about thinking and understanding. Learners must not stop at the surface of knowledge, but explore the essence and principles of knowledge through the surface. Once you understand a certain key point, you will come to a realization because all the knowledge points have been integrated.
III. Learning to Know Yourself
Learning is not just about broadening your horizons, it's about learning about yourself by exploring the unknown. Therefore, you need to communicate more with different people, work more with people smarter than yourself, and go out more to understand the outside world. Only in this way will you discover your shortcomings and blind spots, and be motivated to examine and analyze yourself, so that you can understand how to improve yourself.
IV. Learning to change oneself
Often times, growth comes through change. Learning is about changing the way we think, changing our inertia, and changing our reliance on our innate intuition. In short, it is used to change ourselves in order to continue to grow.
Eight Ways to Learn Effectively
I. Selection of sources of knowledge and information
II. Focus on foundations and principles
Third, the use of knowledge maps Follow the vine, starting from the trunk of the knowledge tree to do breadth or depth traversal, you can get the whole knowledge tree.
IV. Systematic learning
V. Examples of examples Examples of examples include: the ability to associate, the ability to abstract, and the ability to own.
VI. Summary and generalizations
Summarize, arrange, and correlate the information we see and learn, realize the structuring of fragmented information, find patterns and similarities in it, and then simplify and refine it to finally form a routine, pattern, and general method.
VII. Practice makes perfect
Much of the pain of growth comes from practice, but only pain leads to reflection, and reflection ultimately determines the height of growth
VIII. Perseverance
Two tips for persistence: one is to proactively build positive feedback, such as always putting results out there for others to praise, and the other is to program persistence as soon as possible as a habit, and let the biological clock take part in managing it
To achieve efficient learning, an individual should have the right cognition, the right attitude, the right concept and the right method, and it seems quite difficult to fulfill these requirements. However, the daily work of programmers happens to be the pursuit of efficiency, as is the case with code, so is the case with learning.
09 Effective Communication
Overcoming Six Common Communication Barriers
Systematically analyze the main barriers to communication:
- Inaccurate information: The information itself is wrong and cannot be expressed accurately, no matter how skillful the communicator.
- Information overload: too much information equals no information
- No interaction: lack of interaction discourages active communication
- Expression: the same communication content, using different ways of expression will produce very different results
- Second-hand information: information is naturally lost in the process of transmission, and much second-hand information is not sufficiently accurate
- Information asymmetry: when information is maliciously tampered with in the course of network communication, information asymmetry is created
Unbeatable Communication Skills
- Pique the other person's interest: find the other person's focus and move the communication toward it as much as possible
- Reinforcement of the point of view around the theme: to understand the purpose of their own expression before the expression of the organization of the content to be expressed, but also more in the filtering of useful information, and further thinking about whether there are more concise, easy to understand the expression of the four
- Based on data and facts: communication should be as weakly subjective as possible, using more data, examples, authority citations and objective experience to emphasize the authority of the point of view.
12 Programming Paradigms
A programming paradigm is a set of rules and conventions that guide programming methods and styles. Here are some common programming paradigms:
-
Face Process Programming(Procedural Programming):
- Procedure- or function-based, emphasizing the altered state of executable statements.
-
object-oriented programming(Object-Oriented Programming, OOP):
- Class- and object-centric, emphasizing the encapsulation of data and methods for processing it.
-
functional programming(Functional Programming, FP):
- Based on mathematical functions, emphasizing functions without side effects and immutable data.
-
logic programming(Logic Programming):
- Problem solving based on logical reasoning using facts and rules.
-
declarative programming(Declarative Programming):
- Emphasizes the "what" rather than the "how", commonly found in SQL and HTML.
-
Command Programming(Imperative Programming):
- Emphasis is placed on the "how to" by writing step-by-step instructions to control the state of the program.
-
Structured Programming(Structured Programming):
- Emphasize the use of control structures (such as loops and conditional statements) to write clear, maintainable code.
-
concurrent programming(Concurrent Programming):
- Emphasis is placed on writing programs that can perform multiple tasks simultaneously.
-
parallel programming(Parallel Programming):
- Emphasizes the use of multiple processors or cores to perform multiple computational tasks simultaneously.
- event-driven programming(Event-Driven Programming):
- The execution flow of a program is triggered by external events (e.g., user input, messages, signals, etc.).
- metaprogramming(Metaprogramming):
- Programs can generate or modify other programs or their own code.
- responsive programming(Reactive Programming):
- Emphasizes asynchronous data flow and propagation of changes, commonly used in user interface programming.
- Componentized Programming(Component-Based Programming):
- Emphasis is placed on breaking down programs into separate, reusable components.
- cut-oriented programming(Aspect-Oriented Programming, AOP):
- Allows separation of cross-cutting concerns (e.g., logging, transaction management) from business logic.
Each programming paradigm has its own applicable scenarios and advantages, and developers can choose the appropriate paradigm based on project needs and personal preferences.
Functional Programming (FP) is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids the use of program state as well as mutable objects. In contrast to object-oriented programming, functional programming emphasizes functions without side effects and immutability.
Here are some core concepts of functional programming:
- pure function (math.): The output of a function depends only on the input parameters and does not depend on any external state or data. Pure functions do not produce side effects.
- variability: In functional programming, data is immutable. Once data is created, it cannot be changed. Any modification creates a new data structure.
- (math.) higher order function: Functions can be passed as arguments to other functions or returned as results. This allows the creation of more abstract and flexible code.
- function combination: Build more complex functions by combining simple functions.
- recursive (calculation): Since functional programming languages usually do not support looping structures, recursion is the main way to implement looping logic.
- pattern matching: Many functional programming languages support pattern matching, which makes dealing with data structures (e.g. lists, tuples, etc.) more intuitive and concise.
- Inertia assessment: Expressions are not evaluated immediately until they are needed. This can improve performance, especially when working with large data structures.
- typology: Many functional programming languages have powerful type systems that help developers avoid errors and provide better code readability.
Examples of functional programming languages include Haskell, Erlang, Clojure, Scala, F#, and others. The functional programming paradigm is particularly useful in concurrent and parallel computing because it reduces complexity and errors due to shared state and side effects.
13 Principles of Software Development and Architecture Design
Principle 1: Focus on returns rather than technology
The most important thing for a software architecture is the benefits. The following types of gains are important:
- Lower the technical barrier and speed up the development process for the entire team
- Make the whole system run more stable
- Reduce costs through simplification and automation
Principle 3: Selection of mainstream and proven technologies
- Use mature and industrialized technology stacks wherever possible
- Choose globally popular technologies. Only with universality will it be more viable
- As much as possible, don't build your own wheels, and don't magically modify them.
Principle 4: Completeness is more important than performance
The completeness and scalability of the system is more important than the amount of traffic it can support.
- Prioritize the use of scientific and rigorous technical models
- There are many solutions and measures that can be taken for performance issues.
Principle 5: Develop and follow standardized norms
- paypal api style guide/article/2017/09/paypal-api-guide
- Microsoft api guide/zh-cn/azure/architecture/best-practices/api-design
Principle 8: Do not accommodate technical debt
Many companies have significant technical debt, as shown below:
- Use of old technology
- Unreasonable design: e.g. writing a lot of business logic in the gateway, deep coupling of business logic
- Lack of amenities: e.g. automated testing, good software documentation
Never expect to convert a tractor into a Ferrari.
Principle 9: Do not rely on experience
Repeating the past does not lead to progress, updating knowledge leads to growth. So instead of relying on experience to make decisions, I suggest the following path for proper decision making:
- Spend enough time looking for relevant information, such as technical blogs, articles, papers, etc.
- Collecting and comparing practices across companies and the open source world
- Compare the advantages and disadvantages of various options and then make your own decision.
Progress always comes from exploration, and lassoing does come at a cost, but the benefits are also greater. Principles are the roadmap for the journey of discovery in software development and architecture, and respecting and relying on them makes it possible to take risks without making big mistakes, and to seize opportunities without more than losing too much.
15 Time management
The value of time invested
- It's worth investing time in building a strong foundation and familiarizing yourself with the documentation
- Spend your time on things that liberate
- Increase your influence throughout the industry
Planning your time
- For things with the same priority, the shortest job first scheduling algorithm is recommended
- The decreasing number of tasks in the list of surrogates is what gives positive feedback.
16 Research and development efficiency
Key findings on R&D efficiency
- The more the software engineer divides the labor, the less efficient the team will be. Improving service between teams is a top priority. Service is not about me doing things for you, it's about me making it easier for you to do things!
- If you have to be serious about a link, either be serious in design and coding, or be serious in testing. Otherwise, wait until the O&M phase to deal with faults and the efficiency will drop drastically
- Smaller but better team+Conditions or resource constraintsIt is the root of high efficiency. Smaller teams will have less internal conflict, and conditions or resource constraints will lead to the pursuit of simplicity and simplification by using the most economical means to do the most valuable things.
- Technical debt can't be owed, it has to be paid off decisively
- Software architecture to send coupling, team organization to tightly coupled
- Engineer culture is key, valuing process is valuing results
17 Technology Leadership
How do you become a minority with technology leadership?
- Understand the basic technology
- Improvement of learning capacity
- Stick to the right thing.
- Hold yourself to high standards
Improvement of learning capacity
I. Emphasizing sources of information
Learning can be made more efficient by having access to valuable information faster through quality sources.
II. Learning to think by association
There are generalizations and correlations in technology, for example, after understanding the caching of the operating system's web pages, you need to think about the similarities and differences between them. When encountering failures, try to deal with similar problems at once.
III. Exchanges with masters
Communicating with masters not only helps to understand the popular technical direction and key technical points, but also allows them to improve their technical foresight and technical decision-making power by observing and speculating on the technical thinking and problem-solving methods of masters.
19 Performance appraisal
For labor-intensive companies KPIs are appropriate, for knowledge-intensive companies use OKRs
Performance communication must be placed in the usual work to avoid settling scores in the fall
The competencies needed for a valued employee include:
- Learn new skills
- Improvement of professionalism
- Participation in training courses
- Establishing good cooperation with coworkers
- Active participation in teamwork
- Continuously Challenge Yourself
Performance appraisal is not the ultimate goal, the results and their improvement methods are the valuable information. Continuous improvement and self-improvement through the results is really the right way to open the performance.
21 Engineer culture
Improving efficiency in the software engineering domain has the following directions of endeavor:
- Simplicity: Simplicity means easier to understand by users and easier to maintain and operate.
- A firm commitment to automation: the fundamental purpose of writing programs is to eliminate duplication of effort with automation. Moreover, many things are inherently better suited to be done by machines, and no number of people can accomplish a task both as well and as quickly as a machine can.
- Efficient decision-making as a principle: Specific measures include adopting flat management, replacing support work with automated tools, adopting small full-stack teams of no more than ten people, dividing people not by skills but by the product or function they are responsible for, using meetings to vote on proposals, and adopting the product's goals and creed to reduce the process of communication and decision-making.
High quality sharing:
- Engage the audience with questions that take them along for the ride
- Focus the audience by framing their scope of thought with a question model
- Give several different solutions, compare their strengths and weaknesses, and involve the audience in the problem-solving process
- Provide best practices, methodologies or routines. The audience is more likely to be receptive to this content when there is a front end to it
- The whole process can make the audience experience a strong sense of growth and gain